1

Scala でのオブジェクト プライベート変数の実装を理解しようとしています。Scala はこのクラスをコンパイルします

class Counter{
    private[this] var age = 0
}

次の Java バイト コードに変換します。

public class Counter implements scala.ScalaObject {
  private int age;
  public Counter();
}

それでも、JVM はオブジェクト プライベート フィールドをサポートしていないため、クラスの他のインスタンスからアクセスできる古き良きプライベート フィールドがあります。したがって、プライベート フィールドを非表示にするという点で、前のクラスと次のクラスの違いは明確ではありません。

class Counter2{
    private var age = 0
}

public class Counter2 implements scala.ScalaObject {
  private int age;
  private int age();
  private void age_$eq(int);
  public Counter2();
}
4

1 に答える 1

1

JVM は無関係です。Scala のセマンティクスは、JVM ではなく、Scala コンパイラによって実装されます。結局のところ、JVM は Scala が実行される唯一のプラットフォームではありません。CLI には実稼働可能な Scala の実装があり、ECMAScript には実験的なものとネイティブのものがあります。

于 2013-05-09T11:30:33.400 に答える