Scala 宏修改对象
Scala macro modify object
我有下一个宏注解
class Foo(obj: String) extends StaticAnnotation {
def macroTransform(annottees: Any*) = macro MacroImpl.impl
}
object MacroImpl {
def impl(c: Context)(annottees: c.Expr[Any]*): c.Expr[Any] = {
import c.universe._
// i want find `obj` and modify body
}
}
// usage
@Foo("pkg.myObject") class SomeClass {}
是否可以使用宏按名称查找对象并修改对象主体?
目前这是不可能的,因为 Scala 中的宏不能修改其范围之外的任何内容。例如。 def宏只能改写自己的应用,不能改写周围的代码,宏注解只能改写自己的注释者,不能改写周围的代码。
我有下一个宏注解
class Foo(obj: String) extends StaticAnnotation {
def macroTransform(annottees: Any*) = macro MacroImpl.impl
}
object MacroImpl {
def impl(c: Context)(annottees: c.Expr[Any]*): c.Expr[Any] = {
import c.universe._
// i want find `obj` and modify body
}
}
// usage
@Foo("pkg.myObject") class SomeClass {}
是否可以使用宏按名称查找对象并修改对象主体?
目前这是不可能的,因为 Scala 中的宏不能修改其范围之外的任何内容。例如。 def宏只能改写自己的应用,不能改写周围的代码,宏注解只能改写自己的注释者,不能改写周围的代码。