epr*_*rst 6 scala self-type path-dependent-type
是否可以从内在特质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
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢
因为你只能将你的InnerMixin混合在外部的某个扩展中,也许你可以在外部mixin中定义它,这样
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 {
}
}
Run Code Online (Sandbox Code Playgroud)
注意:大多数时候,你不需要一个自我类型,你可以只做OuterMixin扩展外部和InnerMixin扩展内部.