私は、scala オブジェクトをシングルトン Java オブジェクトの単純な省略形と考えてきました。つまり、シングルトンのインスタンス化が保証されたオブジェクトのように動作することを期待しています。それから、私は理解できない次のようなことに出くわします:
object Test extends App{
var x ="a"
override def main(args:Array[String]):Unit = {
println(x )
}
}
「a」ではなくnullを出力します。
生成されたクラスを見ると、オブジェクト定義である Test$.class が得られます。ただし、インスタンス値「a」は、生成されたdelayedInitを使用して、コンパニオンTestクラスで定義されています。これがどのようにインスタンス化されるかについて誰かが光を当てることができますか? これについて私が持っていたメンタルモデルは明らかに間違っています。