Scala方法以_ =结尾

时间:2010-05-04 13:04:55

标签: scala scala-2.8

我似乎记得Scala专门处理以_=结尾的方法,所以像这样:

object X { var x: Int = 0; def y_=(n : Int) { x = n }}

X.y = 1

应致电X.y_=(1)。但是,在2.8.0 RC1中,我收到一条错误消息:

<console>:6: error: value y is not a member of object X
       X.y = 1
         ^

有趣的是,只是尝试调用没有括号的方法也失败了:

scala> X.y_= 1
<console>:1: error: ';' expected but integer literal found.
       X.y_= 1
             ^

我是否记错了实际存在的东西,或者我只是用整块发明了它?

2 个答案:

答案 0 :(得分:13)

这是Scala中的一个极端案例。如果没有getter ,反之亦然,你就不能拥有一个setter。

以下工作正常:

scala> object X {
     |   var x: Int = 0
     |   def y = x
     |   def y_=(n: Int) { x = n }
     | }
defined module X

scala> X.y = 45

scala> X.y
res0: Int = 45

答案 1 :(得分:3)

scala> object X { var x: Int = 0; def y_=(n : Int) { x = n }}
defined module X

scala>

scala> X y_= 1

scala> X.x
res1: Int = 1

scala> object X { var x: Int = _; def y = x ; def y_=(n: Int) { x = n } }
defined module X

scala> X.y = 1

scala> X.y
res2: Int = 1

scala>