scala - Scala:“重新分配给 val”x,但 x 是 var
问题描述
我有以下一段代码
class A(var x: Int, var y: Int){
}
class B(x: Int, y: Int) extends A(x,y){
def setX(xx: Int): this.type = {
this.x = xx
this
}
}
但它给出了以下错误:
error: reassignment to val this.x = xx ^
我不知道发生了什么,因为 x 和 y 应该是变量。这样做的正确方法是什么?
解决方案
成员变量的名称与构造函数参数的名称存在冲突。
显而易见的解决方法编译得很好:
class A(var x: Int, var y: Int)
class B(cx: Int, cy: Int) extends A(cx, cy) {
def setX(xx: Int): this.type = {
this.x = xx
this
}
}
这个问题似乎不是新问题,这里是2009 年论坛条目的链接。在相同的情况下,它有一个带有字面上相同的错误消息的帖子。
根本原因是构造函数参数可以自动转换为private val
,因为可以从对象的方法中引用它们:
class B(cx: Int, cy: Int) {
def foo: Int = cx
}
推荐阅读
- database - OCI_ATTR_FNCODE 是否已弃用?
- r - 如何将线性模型应用于数据框中的每一行,然后求解 R 中特定变量的模型?
- javascript - 用于查找与边距重叠的文本框的 Indesign 脚本
- javascript - 扩展函数不调用基构造函数
- r - 动态更新shinydashboard tabItems时如何保留内容
- java - 为什么连接不上jnp?
- python - 用python发送post请求的最快方法是什么?
- swift - 将 UIView 保存为图像会导致其子视图的 zPositioning 失败
- swift - 尝试从 Swift 5 代码执行 shell 脚本但无济于事
- vue.js - Axios 请求停留在待处理状态