2010-11-13 29 views
9

स्केल-2.8 में जोड़े गए ऑटो-जेनरेट की गई प्रति() विधि का उपयोग करते समय मुझे व्यवहार का एक अजीब बिट अनुभव हो रहा है।स्कैला कॉपी() विषम व्यवहार

जो मैंने पढ़ा है, जब आप किसी दिए गए वर्ग को केस-क्लास के रूप में घोषित करते हैं, तो बहुत सी चीजें आपके लिए स्वत: जेनरेट की जाती हैं, जिनमें से एक प्रतिलिपि() विधि है। तो आप निम्नलिखित कर सकते हैं ...

case class Number(value: Int) 
val m = Number(6) 

println(m)      // prints 6 

println(m.copy(value=7))  // works fine, prints 7 

println(m.copy(value=-7)) // produces: error: not found: value value 

println(m.copy(value=(-7))) // works fine, prints -7 

मैं क्षमा चाहता हूं कि यह प्रश्न पहले ही पूछे जा चुके हैं, लेकिन यहां क्या चल रहा है?

+0

स्केल 2.11 के लिए भी इस प्रश्न से पूछने जा रहा था। खुश मैंने नीचे जवाब देखा। – EdgeCaseBerg

उत्तर

13

स्कैला कई विधि नामों की अनुमति देता है जो अन्य भाषाओं में नहीं हैं, जिनमें =- शामिल हैं। आपके तर्क को value =- 7 के रूप में पार्स किया जा रहा है, इसलिए यह =- पर value पर एक विधि की तलाश कर रहा है जो मौजूद नहीं है। = और - को विभाजित करने के लिए अभिव्यक्ति को पार्स किए जाने के तरीके में आपका कामकाज बदल जाता है।

scala> var foo = 10 
foo: Int = 10 

scala> foo=-7 
<console>:7: error: value =- is not a member of Int 
     foo=-7 
    ^
+0

अहह ... यह समझ में आता है। धन्यवाद! – shj

+2

एक और कामकाज बस आपके बराबर के आस-पास एक जगह डालना होगा, इसलिए: 'value = -7' –