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

reg*_*exp 8 scala sbt

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

class MyImplicit

class FooTest extends ImplicitProvider {

  def getImplicit(implicit i: MyImplicit) = i

  getImplicit
}

trait ImplicitProvider {
  implicit val myImplicit = new MyImplicit
}
Run Code Online (Sandbox Code Playgroud)

编译错误是:

could not find implicit value for parameter i: MyImplicit getImplicit
Run Code Online (Sandbox Code Playgroud)

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

我用scala 2.11.7和sbt 0.13.9编译.

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

Jas*_*r-M 3

这似乎是一个“功能”。看看这张票中的评论。

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

class MyImplicit

class FooTest extends ImplicitProvider {

  def getImplicit(implicit i: MyImplicit) = i

  getImplicit
}

trait ImplicitProvider {
  implicit val myImplicit: MyImplicit = new MyImplicit
}
Run Code Online (Sandbox Code Playgroud)