似乎implicit
关键字在应用于宏def
时无效。
例如,请使用以下代码:
// Compilation unit A:
case class Foo[A]
// end A.
// Compilation unit B:
implicit def implicitFoo[A]: Foo[A] = macro implicitFoo_impl[A]
def implicitFoo_impl[A](c: Context): c.Expr[Foo[A]] =
c.universe.reify(Foo[A])
// end B.
// Compilation unit C:
implicitly[Foo[Int]] // Fails with "could not find implicit value for parameter e: Foo[Int]
// end C.
implicitly[Foo[Int]]
失败,但不应该;如果我用implicit def implicitFoo[A]: Foo[A] = macro implicitFoo_impl[A]
替换implicit def implicitFoo[A]: Foo[A] = ???
,编译成功。
这是错误还是用户错误?
答案 0 :(得分:4)
这是由https://issues.scala-lang.org/browse/SI-5923引起的,它在master(2.11.0-SNAPSHOT)中修复,我计划向后移植到2.10.2。在上述JIRA页面上查看更多信息(包括可能妨碍我及时制作2.10.2的潜在问题)。