由于构造函数参数(属性)在基类和派生类中具有相同名称并在派生方法中使用而导致的Scala编译器错误

Der*_*har 4 constructor scala

如果没有在类的主构造函数中重命名构造函数参数,B我可以对以下代码进行哪些更改(不更改其函数),以便Scala成功编译它?

例:

class A(var a: Int)
class B(a: Int) extends A(a) {
  def inc(value: Int) { this.a += value }
}
Run Code Online (Sandbox Code Playgroud)

错误:

$ scala construct.scala
construct.scala:3: error: reassignment to val
  def inc(value: Int) { this.a += value }
                               ^
one error found
Run Code Online (Sandbox Code Playgroud)

我在回答上一个问题时提出了这个问题,"在Scala中,如何在类的主构造函数中定义局部参数?" .

Mit*_*ins 7

class A(var a: Int)
class B(a: Int) extends A(a) {
  def inc(value: Int) { (this: A).a += value }
}
Run Code Online (Sandbox Code Playgroud)

  • 注意:`(this:A)`在技术上被称为"类型归属"(http://davetron5000.github.com/scala-style/types/ascription.html). (5认同)