3

現在、「The D Programming Language」という本を読んでいます。それは内部クラスについて語っています。

class Outer{
    int x;

    this(){
        x = 99;
        new Inner;
    }

    class Inner{
        int x;

        this(){
            x = 5;
            writeln( "Inner x = ", x, "; Outer x = ", this.outer.x );
        }
    }
}

この本にあるように、クラス Outer の x にアクセスできるようにするには、this.outer.x を使用する必要があります。しかし、紛らわしいのは、クラスの名前「Outer」が小文字の「outer」に変わることです。通常のクラス名「Outer」では、コンパイラはエラー メッセージを表示します。コンパイラが名前として何を使用する必要があるかを決定し、生成した名前を強制的に使用するようなものです。

私の問題は、クラスの名前を「Outer」から「bLaH」に変更すると、クラスを外側にできなくなったことです。

class bLaH{
    int x;

    this(){
        x = 99;
        new Inner;
    }

    class Inner{
        int x;

        this(){
            x = 5;
            writeln( "Inner x = ", x, "; Outer x = ", this.bLaH.x );
        }
    }
}

外部クラスにアクセスするときに使用する名前は明らかではありません。最初の文字は小文字になりましたが、コンパイラは「test1.bLaH」が定義されていないと言っています。(ファイル名はtest1.d)

コンパイラが外部クラスの名前をすべて小文字に変換するのではないかと考えて、「this.bLaH」を「this.blah」に変換すると、今度はコンパイラが「未定義変数 'blah'」と言います。

これについて言語に設計エラーはありますか? プログラマーとして、私はコンパイラーによるこの種の名前変換が好きではありません。

私は Windows XP を使用しています。DMD のバージョンは 2.060 です。

4

1 に答える 1

12

outerがキーワードです。みたいなsuperものです。クラスは常に1 つのクラスだけにネストされるため、outerキーワードはそのクラスを参照します。

http://dlang.org/class.html#nested

outerここでは、それが実際にプロパティであることがわかります。

于 2013-01-04T09:27:01.643 に答える