Scala Copy () Нечетное поведение - PullRequest
9 голосов
/ 13 ноября 2010

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

Из того, что я прочитал, когда вы объявляете данный классв качестве 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

Прошу прощения, если этот вопрос уже задавался, но что здесь происходит?

1 Ответ

13 голосов
/ 13 ноября 2010

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
       ^
...