了解Scala中的DI

时间:2016-08-29 15:03:35

标签: scala traits

我有两个特点:

trait A {
  def a
}

trait B { this: A =>
  def b
}

现在,我尝试使用trait B

def method(bTrait: B) = bTrait.a //error

但它拒绝编译。我认为我们可以依赖B的任何实现始终扩展A。怎么了?为什么不编译?

1 个答案:

答案 0 :(得分:1)

  

我认为我们可以始终依赖B的任何实现   延伸A

这不是this: A =>的含义。这意味着:“为了使用B,我需要在编译时提供A的实例”。这可以通过mixin

完成

一旦你明白了,你可以这样做:

def method(bTrait: B with A) = bTrait.a