scala class 成员宏实现

scala class member macro implementation

我一直认为宏声明和实现需要像教程中那样定义:

object Impl {
    def m(c: Context)(body: c.Expr[Unit]): c.Expr[T] = ???
}
class Usage {
    def m(body: Unit): T = macro Impl.m = ???
}

然而现在我遇到了:

class RecordMacros(val c: Context) {
    import c.universe._
    def apply_impl[Rep: c.WeakTypeTag](method: c.Expr[String])(v: c.Expr[(String, Any)]*): c.Expr[Any] = ???
}

来源:https://github.com/TiarkRompf/virtualization-lms-core/blob/macro-trans/src/common/Records.scala

有什么不同,是从每个方法中重构上下文吗? 此外, class 在访问该方法之前似乎没有被实例化。 谢谢

它们被称为仅在 2.11 中可用的宏包,是的,这就是它们的用途。 http://docs.scala-lang.org/overviews/macros/bundles.html