9

Scala-2.8で追加された自動生成されたcopy()メソッドを使用すると、奇妙な動作が発生します。

私が読んだことから、特定のクラスをケースクラスとして宣言すると、多くのものが自動生成されます。そのうちの1つが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 に答える