对于Scala属性,我有一个小小的难题。在赋值表达式中找不到明确定义的setter
各种博客和教程告诉我,这:
class Something
{
var foo = 1
}
...可以被指定为...
class Something
{
private var _field = 1
def foo = _field
def foo_(foo: Int) = _field = foo
}
这让我感觉良好,做任务的编译器查找时为一个name_
方法。问题是它似乎不适合我。
在下面的实际代码(同样的事情在其他类情况也一样):
class Camera
{
private var _position = Vector2.zero
def position: Vector2 = _position
def position_(position: Vector2) =
{
// Do boring transforms.
_position = position // position shadows outer scope so this does work.
}
}
// ...
val camera = new Camera
camera.position = Vector2(10, 0)
我得到一个错误:
error: value position_= is not a member of Camera camera.position = Vector(10, 0)
相反,我需要调用它下面的方式实际上使它工作:camera.position_(Vector2(10, 0))
这既不美观也不可读。
在其他情况下,例如,当尝试拥有公共getter和私人setters时,我面临同样的问题。
我在做什么错?
上的Java HotSpot虚拟机使用scalac 2.8.0 1.6
谢谢。我应该多注意错误信息:) – Skurmedel 2010-10-10 22:28:16