Scala,class 使用可变变量,在覆盖方法中更新

Scala, class using mutable var, update in overriding method

我很难理解如何让下面的代码结构工作。

在 Scala 中,我有一个 class MyClass 继承自 SomeClass 我在这种情况下添加了一个 var 成员变量,称为 mutableArray 它是在重写方法 overridingSomeClassMethod 中更新,并在我立即多次创建 MyClass 的新实例时调用。但是在 main 中,当我尝试获取更新的 mutableArray 变量时,它会打印出实例化的 var ,就好像它是不可变的或仅在覆盖方法中具有作用域一样。

我无法更改父 SomeClass 中的方法,我尝试创建一个伴生对象并将变量放入 SomeOtherObject 中,但我遇到了完全相同的问题。

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

可能您遇到了臭名昭著的 "one question FAQ" 关于初始化顺序的问题。

如果该方法由超类构造函数调用,那么您的初始化会在这之后发生,将数据重置为零。

您可以使用 early initializer:

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