在Scala中,如何在不是数据成员的类的主构造函数中定义局部参数,例如,仅用于初始化基类中的数据成员?
例如,在下面的代码中,如何b在类的主构造函数中正确定义参数,B以便它只生成临时本地参数而不是数据成员?
class A(var a: Int)
class B(?b?) extends A(b)
Run Code Online (Sandbox Code Playgroud)
Randall,你的答案解释了当我引入一个inc增加属性的方法时Scala编译器抱怨的原因a,但是也改变了类B构造函数中参数的名称以匹配类构造函数中参数的名称A:
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编译器输出:
$ 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抱怨因为引用in 而类B必须现在具有私有的只读属性.更改以生成不同的编译器错误:aaincB(a: Int)B(var a: Int)
construct.scala:2: error: error overriding variable …Run Code Online (Sandbox Code Playgroud)