2

似乎该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] = ???,编译成功。

这是错误还是用户错误?

4

1 回答 1

4

这是由https://issues.scala-lang.org/browse/SI-5923引起的,它已在 master (2.11.0-SNAPSHOT) 中修复,我计划将其向后移植到 2.10.2。在上述 JIRA 页面上查看更多信息(包括可能阻止我及时完成 2.10.2 的潜在问题)。

于 2013-04-08T05:44:37.853 回答