2014-10-09 21 views

risposta

5

Come si sarà in grado di mescolare il vostro InnerMixin solo all'interno di alcune estensione di esterno, forse si potrebbe definirlo all'interno di un mixin esterno, in questo modo

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 { 

    } 

} 

Nota : la maggior parte delle volte non hai bisogno di un self-type e puoi fare solo OuterMixin estende Outer e InnerMixin estende Inner.

2

Aggiungere un campo interno che consente di ottenere al suo esterno

trait Outer { 
    val foo: String 

    trait Inner { 
    val outer = Outer.this 
    } 
} 

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