2010-11-13 16 views
9

Ich habe ein seltsames Verhalten, wenn ich die automatisch generierte copy() -Methode verwende, die in Scala-2.8 hinzugefügt wurde.Scala Copy() Odd Behavior

Aus was ich gelesen habe, wenn Sie eine bestimmte Klasse als eine Fallklasse deklarieren, werden viele Dinge automatisch für Sie generiert, von denen eine die Methode copy() ist. So können Sie folgendes tun:

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 

Ich entschuldige mich, wenn diese Frage bereits gestellt wurde, aber was ist hier los?

+0

wurde gerade diese Frage für scala 2.11 auch stellen. Ich bin froh, dass ich die Antwort unten gesehen habe. – EdgeCaseBerg

Antwort

13

Scala erlaubt viele Methodennamen, die andere Sprachen nicht haben, einschließlich =-. Ihr Argument wird als value =- 7 geparst, so dass es nach einer Methode =- auf value sucht, die nicht existiert. Ihre Problemumgehung ändert die Art, wie der Ausdruck analysiert wird, um die = und die - zu zerlegen.

scala> var foo = 10 
foo: Int = 10 

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

Ahhh ... das macht Sinn. Vielen Dank! – shj

+2

Eine andere Problemumgehung wäre einfach, ein Leerzeichen um equals zu legen, also: 'value = -7' –