2010-11-13 6 views
9

Я испытываю нечетное поведение, когда я использую метод автогенерации copy(), который был добавлен в Scala-2.8.Scala Copy() Нечетное поведение

Из того, что я прочитал, когда вы объявляете данный класс как класс case, для вас генерируется много вещей, одним из которых является метод copy(). Таким образом, вы можете сделать следующее ...

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

был только что задал этот вопрос для scala 2.11. Рад, что я увидел ответ ниже. – EdgeCaseBerg

ответ

13

Scala позволяет использовать многие имена методов, которых нет на других языках, включая =-. Ваш аргумент анализируется как 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

Ahhh ... это имеет смысл. Благодаря! – shj

+2

Другим обходным решением было бы просто разместить пробелы вокруг ваших равных, поэтому: 'value = -7' –

Смежные вопросы