1

我有以下代码:

@compileTimeOnly("enable macro paradise to expand macro annotations")
class replace extends StaticAnnotation {
  def macroTransform(annottees: Any*) = macro replaceImpl.replace
}

object replaceImpl {
  def replace(c: Context)(annottees: c.Expr[Any]*): c.Expr[Any] = {
    import c.universe._

    // ? 

    c.Expr[Any](q"")
  }
}

通过此代码,我想x在下一个使用示例中替换变量名 ():

@replace
def foo(x: Int) = x + 1 

这是简单的方法,但是如果我有一个包含许多表达式的大方法,那么替换变量名的最简单方法是什么(例如from xto )?y

4

1 回答 1

3

经过一番调查,我需要使用Transfomer#transform方法,有些是这样的:

val t = new Transformer {
  override def transform(tree: Tree) = {
    val nt = tree match {
      case Ident(x) => Ident(someNewName)
      case x => x
    }
    super.transform(newTree)
  }
}

// and then

val result = t.transform(inputTree)
于 2016-03-26T22:26:38.323 回答