首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何解决scala“重新分配到val”错误?

如何解决scala“重新分配到val”错误?
EN

Stack Overflow用户
提问于 2022-11-07 01:06:45
回答 1查看 67关注 0票数 1

我正在尝试封装一些代码,但在scala中,由于某种原因,您必须直接访问变量。为什么这段代码不编译?

代码语言:javascript
复制
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
  }
}

我得到了以下错误:

代码语言:javascript
复制
[error] Test.scala:33:32: reassignment to val
[error]     world.display.camera_pitch = this.pitch
EN

回答 1

Stack Overflow用户

发布于 2022-11-07 21:56:05

我把你的示例代码复制到一个终端中。这将失败,因为var被函数隐藏,该函数具有相同的名称。

您必须选择不同的变量名或函数名。Scala有一些有趣的行为,其中变量和函数可以互换,但这种情况是不允许的。

我个人只想从MyDisplay中删除这个函数

代码语言:javascript
复制
def camera_pitch():Double = {
    render.camera_pitch
}

在外部代码中,我称之为world.display.render.camera_pitch

非主题,但这不是很好的scala代码,因为它使用var以及OO设置器/getter风格,这使得对多代码性能的推理变得困难。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74341001

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档