2014-10-09 10 views

Odpowiedz

5

Jak można mieszać InnerMixin tylko wewnątrz jakiejś przedłużenie zewnętrznej, może można go zdefiniować wewnątrz zewnętrznej wstawek, w ten sposób

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 { 

    } 

} 

Uwaga : przez większość czasu nie potrzebujesz własnego typu i możesz zrobić tylko OuterMixin rozszerza Outer i InnerMixin rozciąga Wewnętrzną.

2

Dodawanie pola do wkładek wewnętrznych, które pozwala uzyskać na to jest zewnętrzna

trait Outer { 
    val foo: String 

    trait Inner { 
    val outer = Outer.this 
    } 
} 

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