2010-11-13 36 views
9

que estoy experimentando un poco extraño comportamiento cuando se utiliza el método de copia generada automáticamente() que se añadió en Scala-2.8.Scala Copiar() Comportamiento extraño

Por lo que he leído, cuando se declara una clase dada como una clase caso, muchas cosas son generados automáticamente para ti, uno de los cuales es el método de copia(). Así que usted puede hacer lo siguiente ...

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 

pido disculpas si esta pregunta ya ha sido pedido, pero lo que está pasando aquí?

+0

iba a hacer esta pregunta también para scala 2.11. me alegro de ver la respuesta a continuación. – EdgeCaseBerg

Respuesta

13

Scala permite que muchos nombres de los métodos que otros idiomas no lo hacen, incluyendo =-. Su argumento está siendo analizado como value =- 7 lo que está buscando un método =- en value que no existe. Su solución toda cambiar la forma de la expresión se analiza para dividir el = y la -.

scala> var foo = 10 
foo: Int = 10 

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

Ahhh ... eso tiene sentido. ¡Gracias! – shj

+2

Otra solución sería simplemente poner a los espacios alrededor de sus iguales, por lo que: 'valor = -7' –