Scala:“重新分配给val” x,但x为var

时间:2018-06-30 12:02:59

标签: scala 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应该是变量。这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

成员变量的名称与构造函数参数的名称存在冲突。

显而易见的解决方法可以很好地编译:

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
    }
}

这个问题似乎不是新问题,这是一个llink to a forum entry from 2009。它的发布带有literally the same error message in the same situation

根本原因是构造函数参数可以自动转换为私有val,因为可以从对象的方法中对其进行引用:

class B(cx: Int, cy: Int) {
  def foo: Int = cx
}