9

当我使用 Scala-2.8 中添加的自动生成的 copy() 方法时,我遇到了一些奇怪的行为。

根据我的阅读,当您将给定的类声明为案例类时,会自动为您生成很多东西,其中之一就是 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

如果已经问过这个问题,我很抱歉,但是这里发生了什么?

4

1 回答 1

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
       ^
于 2010-11-13T20:39:18.323 回答