Я, кажется, помню методы обработки 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
^
Я - misremembering что-то, что действительно на самом деле существует, или я просто изобретал его из целой ткани?
Это один из тех краевых случаев в Scala. У вас не может быть сеттера без геттера и наоборот .
Следующее работает нормально:
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
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>