scala类成员宏实现

时间:2015-10-08 23:22:55

标签: scala scala-macros

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

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

有什么区别,是关于从每个方法重构上下文? 此类在访问方法之前似乎没有实例化。 感谢

1 个答案:

答案 0 :(得分:4)

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