我有两个特点:
trait A {
def a
}
和
trait B { this: A =>
def b
}
现在,我尝试使用trait B
:
def method(bTrait: B) = bTrait.a //error
但它拒绝编译。我认为我们可以依赖B
的任何实现始终扩展A
。怎么了?为什么不编译?
答案 0 :(得分:1)
我认为我们可以始终依赖
B
的任何实现 延伸A
这不是this: A =>
的含义。这意味着:“为了使用B
,我需要在编译时提供A
的实例”。这可以通过mixin
一旦你明白了,你可以这样做:
def method(bTrait: B with A) = bTrait.a