我正在尝试封装一些代码,但在Scala中,由于某些原因,您必须直接访问变量。为什么这段代码不能编译?
class MyRender {
var camera_pitch = 0.2d
}
class MyDisplay {
val render = new MyRender()
def camera_pitch():Double = {
render.camera_pitch
}
def camera_pitch_=(pitch: Double) = {
render.camera_pitch = pitch
}
}
class MyWorld {
val display = new MyDisplay()
}
class MyEntity {
val world = new MyWorld()
val pitch = 4d
def update() = {
world.display.camera_pitch = pitch //this fails
world.display.render.camera_pitch = pitch //this works
}
}
我收到以下错误:
[error] Test.scala:33:32: reassignment to val
[error] world.display.camera_pitch = this.pitch
1条答案
按热度按时间mrfwxfqh1#
我将您的示例代码复制到终端中。这会失败,因为var被同名的函数隐藏。
您必须选择不同的变量名或函数名。Scala有一些有趣的行为,其中变量和函数可以互换,但这种情况是不允许的。
我个人会直接从MyDisplay上删除这个功能
在外部代码中,我会调用
world.display.render.camera_pitch
。var
和OO setter/getter风格,这使得对多代码性能的推理变得困难。*