为什么以下代码会导致编译错误:
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进行编译。
这是预期的行为还是错误?
答案 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
}