是否可以从内部特质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
}
}
感谢
答案 0 :(得分:5)
因为你只能将你的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 {
}
}
注意:大多数时候,你不需要自我类型,你可以只做OuterMixin扩展Outer和InnerMixin扩展内部。
答案 1 :(得分:2)
向Inner添加一个字段,让您可以获得它的外部
trait Outer {
val foo: String
trait Inner {
val outer = Outer.this
}
}
trait InnerMixin { this: Outer#Inner =>
def bar {
outer.foo
}
}