为什么在使用后在单独的特征中定义的implicits会导致编译错误?

时间:2016-02-18 11:34:17

标签: scala sbt

为什么以下代码会导致编译错误:

class MyImplicit

class FooTest extends ImplicitProvider {

  def getImplicit(implicit i: MyImplicit) = i

  getImplicit
}

trait ImplicitProvider {
  implicit val myImplicit = new MyImplicit
}

编译错误是:

could not find implicit value for parameter i: MyImplicit getImplicit

如果我将特性ImplicitProvider移到FooTest类之上,一切正常。

我使用scala 2.11.7和sbt 0.13.9进行编译。

这是预期的行为还是错误?

1 个答案:

答案 0 :(得分:4)

这似乎是一个"功能"。看看this ticket中的评论。

显然,当未明确指定隐式的类型时,这是预期的行为。因此,您可以通过向隐式val添加类型注释来修复它。

class MyImplicit

class FooTest extends ImplicitProvider {

  def getImplicit(implicit i: MyImplicit) = i

  getImplicit
}

trait ImplicitProvider {
  implicit val myImplicit: MyImplicit = new MyImplicit
}