2014-10-09 7 views
6

Ist es möglich, auf Werte im äußeren Merkmal eines inneren Merkmals zuzugreifen? dh:Zugriff auf Werte vom pfadabhängigen Typ mixin

trait Outer { 
    val foo 
    trait Inner 
} 

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

dank

Antwort

5

Wie Sie in der Lage sein, Ihre InnerMixin nur innerhalb einiger Ausdehnung der äußeren mischen, vielleicht könnte man es innerhalb eines äußeren mixin zu definieren, auf diese Weise

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 { 

    } 

} 

Hinweis : Die meiste Zeit brauchst du keinen Selbsttyp und du kannst nur OuterMixin extends Outer und InnerMixin extends Inner machen.

2

ein Feld Inner hinzufügen, dass man es bekommen Letss äußere

trait Outer { 
    val foo: String 

    trait Inner { 
    val outer = Outer.this 
    } 
} 

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