2010-11-13 10 views
9

Mam dziwne zachowanie, gdy korzystam z automatycznie wygenerowanej metody copy(), która została dodana w Scala-2.8.Scala Copy() Dziwny zachowanie

Z tego co przeczytałem, kiedy deklarujesz daną klasę jako klasę case, wiele rzeczy jest generowanych automatycznie dla ciebie, z których jedną jest metoda copy(). Możesz wykonać następujące czynności ...

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 

Przepraszam, jeśli to pytanie już zostało zadane, ale co się tutaj dzieje?

+0

zadał to pytanie także scala 2.11. cieszę się, że widziałem odpowiedź poniżej. – EdgeCaseBerg

Odpowiedz

13

Scala pozwala na wiele nazw metod, których nie mają inne języki, w tym =-. Twój argument jest przetwarzany jako value =- 7, więc szuka metody =- na value która nie istnieje. Twój sposób obejścia wszystkich zmienia sposób analizowania wyrażenia w celu podzielenia = i -.

scala> var foo = 10 
foo: Int = 10 

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

Ahhh ... to ma sens. Dzięki! – shj

+2

Innym obejściem byłoby po prostu umieszczenie spacji wokół równych sobie, więc: 'value = -7' –