我很难理解如何使以下代码结构起作用。
在Scala中,我有一个继承自SomeClass
的类var
我在这种情况下添加了一个名为mutableArray
的{{1}}成员变量,并且在重写方法中进行了更新overridingSomeClassMethod
并在我立即多次创建MyClass
的新实例时调用。但是在main
中,当我尝试获取更新的mutableArray
变量时,它打印出实例化的var
,就像它是不可变的一样,或者只有覆盖方法中的范围。
我无法更改父SomeClass
中的方法,我尝试创建一个伴随对象,并将变量放在包含SomeOtherObject
中,但我得到了同样的问题。< / p>
import scala.collection.mutable.ArrayBuffer
object SomeOtherObject{
case MyClass(...) extends SomeClass(..){
var mutableArray: ArrayBuffer[Int] = ArrayBuffer.fill(5)(0)
def overridingSomeClassMethod(...){
var someReturnVar = 0.0
mutableArray(0) += 1
println(mutableArray.mkString) // last output -> 84169
someReturnVar
}
}
def main(args: Array[String]){
var mc = new MyClass
println(mc.mutableArray.mkString) // output -> 00000
}
}
答案 0 :(得分:1)
可能你正在讨论关于初始化顺序的臭名昭着的“一问题常见问题”。
如果超类构造函数调用该方法,则在此之后进行初始化,将数据重置为零。
答案 1 :(得分:1)
您可以使用early initializer:
case MyClass(...) extends {
var mutableArray: ArrayBuffer[Int] = ArrayBuffer.fill(5)(0)
} with SomeClass(..) {