我正在尝试编写一个宏来包装一个函数并从将为其调用分配的值中扣除一个参数。
object TestMacros {
def foo(name: String): String = name.toUpper
def bar = macro barImpl
def barImpl(c: Context): c.Expr[String] = {
import c.universe._
//TODO extract value name (should be baz)
c.Expr[String](Apply(
Select(newTermName("TestMacros"), newTermName("foo")), // Probably wrong, just typed it quickly for demonstration purposes
List(Literal(Constant("test"))))) // Should replace test by value name
}
}
object TestUsage {
val baz = bar // should be BAZ
}
我不知道这是否足够清楚。我已经调查了 c.prefix 和 c.macroApplication 都没有成功。我正在使用没有宏天堂编译器插件的 Scala 2.10.2。