gpt4 book ai didi

scala - 在赋值表达式中找不到显式定义的 setter

转载 作者:行者123 更新时间:2023-12-01 07:02:10 25 4
gpt4 key购买 nike

关于 Scala 属性,我有一个小难题。

各种博客和教程告诉我:

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)) 既不美观也不可读。

在其他情况下,例如,当我尝试使用公共(public) getter 和私有(private) setter 时,我遇到了同样的问题。

我做错了什么?

在 Java HotSpot VM 1.6 上使用 scalac 2.8.0

最佳答案

您的 setter 需要命名为 foo_=position_=。如果您将它们命名为 foo_position_ 编译器不会将它们识别为 setter。

关于scala - 在赋值表达式中找不到显式定义的 setter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3902398/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com