2017-07-21 16 views
0

簡単な方法は、外側のクラス本体にthisの宣言を指定して、各クラスの一意の名前を定義することです。しかし、私は外部クラスを変更せずにアクセス権を書きたいと思います。匿名の外部クラスにアクセスすることは可能ですか?

コード例:

trait Test { 
    def z = new Test { 
    val a = 1 
    def y = new Test { 
     val a = false 
     def x = new Test { 
     val b = 2 * a 
     } 
    } 
    } 
} 

私はどのように私は匿名クラスのthisを指定することができますval b

を定義するときにだけouter.a outer.outer.aの代わりにアクセスしたいのですが? Namedの場合はNamed.thisと書くことができますが、匿名クラスには名前がありません。

答えて

0

これはself typesで達成することができます:

trait Test { greatGrandparent => 
    def z = new Test { grandparent => 
    val a = 1 
    def y = new Test { parent => 
     val a = false 
     def x = new Test { 
     val b = 2 * grandparent.a 
     } 
    } 
    } 
} 
+0

私は彼らが与えられている親クラスを変更できませんでした。すでに消去されているため、シンボルから自己参照を読み取ることができませんでした。したがって、質問:最初の質問で述べたように、自己型の機能に頼ることなく親クラスを参照する方法 – ayvango

+0

'greatGrandparent'の参照は、親クラスが調整される唯一の場所です。私は 'grandParent'と' parent'に対して の質問を十分に理解していないと思います。 – Andy

+0

外部クラスを変更できませんでした。自己クラスを追加できませんでした。彼らはすでにメソッド内の変数によって陰影付けされた自己参照を持つことができます。自己参照の可用性のような追加の仮定をせずにgreatgrandparentを参照する堅牢な方法が必要です – ayvango

関連する問題