2014-10-09 11 views
6

Dış özellikteki değerlere bir iç özellik karışımından erişmek mümkün mü? yani:Yola bağımlı türden karışım değerlerine erişme

trait Outer { 
    val foo 
    trait Inner 
} 

trait InnerMixin { this: Outer#Inner => 
    def bar { 
    // how can I access 'foo' here? smth like Outer.this.foo 
    } 
} 

teşekkürler, sadece dış bazı uzantısı içinde senin InnerMixin karıştırmak için belki bir dış mixin içine tanımlayabiliriz mümkün olacak gibi

cevap

5

, bu şekilde

trait Outer { 

    val foo: Int 

    trait Inner 
} 

trait OuterMixin { this: Outer => 

    trait InnerMixin { this: Inner => 
    def extension = OuterMixin.this.foo 
    } 
} 

class ActualOuter extends Outer with OuterMixin { 
    val foo = 12 
    class ActualInner extends Inner with InnerMixin { 

    } 

} 

Not : çoğu zaman, kendinize bir türe ihtiyacınız yoktur ve sadece OuterMixin dışını genişletir ve InnerMixin Inner'i genişletir.

2

bunda almak sağlar Inner bir alan ekleyin dış bulunuyor

trait Outer { 
    val foo: String 

    trait Inner { 
    val outer = Outer.this 
    } 
} 

trait InnerMixin { this: Outer#Inner => 
    def bar { 
    outer.foo 
    } 
}