2014-10-09 73 views
6

是否可以從內部特徵混合中訪問外部特徵的值?即:從路徑依賴類型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 
    } 
} 

感謝

回答

5

正如你將只能夠內部的外一些擴展混音InnerMixin,也許你可以把它定義一個外部混入內部,這樣

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 { 

    } 

} 

注:大多數時候,你不需要自我類型,你可以做OuterMixin擴展Outer和InnerMixin擴展Inner。

2

添加到內場,讓你在它的外

trait Outer { 
    val foo: String 

    trait Inner { 
    val outer = Outer.this 
    } 
} 

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