2016-09-22 14 views
0

私は匿名の内部クラスを持っています。コンストラクタ内のその(匿名の)外部クラスにアクセスしたいと思います。ですから、私はこの方法を実装したいと思います:スカラー:コンストラクタの内部クラスから外部クラスを取得

+0

スタックトレースの魔法がなければ不可能です。たぶん私たちはあなたの問題をより良い解決策を提案することができますか? – talex

+0

私は暗黙のパラメータでこれを試しましたが、失敗しましたが、おそらくそれは可能でしょうか? –

+0

私はあなたがこれを行うことによっていくつかの他の問題を解決しようとしていると信じています。それが本当であれば、私たちに説明してください。多分もっと良い解決策かもしれません。 – talex

答えて

1

あなたは簡単に十分な(私はOuterInnerの両方を変更することができますが、それらを使用してコードが問題のようになっているはずと仮定)は、この使用して暗黙を行うことができます。宣言:

class Outer { 
    implicit def o: Outer = this 
} 

class Inner(implicit val outerClass: Outer) { 
} 

使用法:

new Outer { 
    new Inner { 
    // can use outerClass here 
    } 
} 

または

new Outer { 
    val inner = new Inner { 

    } 

    // inner.outerClass 
} 

そして、私は、これはDSLのために有用である想像しています(RのAPIのユーザーは)実際にそれを最初にしたいことを確認することができます!

2

このアプローチについては何が言いますか?

new Outer { self => 
    new Inner(self) { 

    } 
} 

class Outer { 
} 

class Inner[A](outerClass:A) { 
    println("CLASS: " + outerClass.getClass) 
} 
関連する問題