2010-11-13 6 views
9

Sto riscontrando un po 'strano comportamento quando utilizzo il metodo copy() generato automaticamente in Scala-2.8.Scala Copy() Comportamento dispari

Da quello che ho letto, quando si dichiara una classe data come classe case, vengono generate automaticamente molte cose, una delle quali è il metodo copy(). Così si può fare quanto segue ...

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 

Mi scuso se questa domanda è già stata posta, ma quello che sta succedendo qui?

+0

stava per fare questa domanda anche per scala 2.11. felice di aver visto la risposta qui sotto. – EdgeCaseBerg

risposta

13

Scala consente molti nomi di metodi non utilizzati da altre lingue, incluso =-. Il tuo argomento viene analizzato come value =- 7 quindi sta cercando un metodo =- su value che non esiste. Tutte le soluzioni alternative cambiano il modo in cui l'espressione viene analizzata per dividere lo = e lo -.

scala> var foo = 10 
foo: Int = 10 

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

Ahhh ... ha senso. Grazie! – shj

+2

Un'altra soluzione sarebbe semplicemente quella di mettere uno spazio attorno ai tuoi pari, quindi: 'value = -7' –