我正在尝试封装一些代码,但在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发布于 2022-11-07 21:56:05
我把你的示例代码复制到一个终端中。这将失败,因为var被函数隐藏,该函数具有相同的名称。
您必须选择不同的变量名或函数名。Scala有一些有趣的行为,其中变量和函数可以互换,但这种情况是不允许的。
我个人只想从MyDisplay中删除这个函数
def camera_pitch():Double = {
render.camera_pitch
}在外部代码中,我称之为world.display.render.camera_pitch。
非主题,但这不是很好的scala代码,因为它使用var以及OO设置器/getter风格,这使得对多代码性能的推理变得困难。
https://stackoverflow.com/questions/74341001
复制相似问题