我一直认为宏声明和实现需要在教程中定义:
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
有什么区别,是关于从每个方法重构上下文? 此类在访问方法之前似乎没有实例化。 感谢
答案 0 :(得分:4)
它们被称为仅在2.11中可用的宏包,是的,这就是它们的用途。 http://docs.scala-lang.org/overviews/macros/bundles.html