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
我一直认为宏声明和实现需要像教程中那样定义:
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