Scala,使用mutable var的类,在重写方法中更新

时间:2015-10-20 23:28:16

标签: scala inheritance override var

我很难理解如何使以下代码结构起作用。

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

2 个答案:

答案 0 :(得分:1)

可能你正在讨论关于初始化顺序的臭名昭着的“一问题常见问题”。

如果超类构造函数调用该方法,则在此之后进行初始化,将数据重置为零。

答案 1 :(得分:1)

您可以使用early initializer

case MyClass(...) extends {
  var mutableArray: ArrayBuffer[Int] = ArrayBuffer.fill(5)(0)
} with SomeClass(..) {