以下代码获取调用函数(如C _ _ FUNC _ _):
def __func__(c: Context) = {
import c.universe._
c.enclosingMethod match {
case DefDef(mods, name, tparams, vparamss, tpt, rhs) =>
c.universe.reify(println(
"\n mods "+c.literal(mods.toString).splice
+"\n name "+c.literal(name.toString).splice
+"\n tparams "+c.literal(tparams.toString).splice
+"\n vparamss "+c.literal(vparamss.toString).splice
+"\n tpt "+c.literal(tpt.toString).splice
+"\n rhs "+c.literal(rhs.toString).splice
))
case _ => c.abort(c.enclosingPosition, "NoEnclosingMethod")
}
}
但是如何获得更多深度,即获取调用函数调用宏的函数的名称?
提前感谢您的帮助。
答案 0 :(得分:3)
您可以尝试检查c.enclosingUnit
或更简单的内容,例如c.enclosingClass
或c.enclosingMethod
。获得机箱后,您可以遍历它并尝试检测c.macroApplication
的父母。
然而,这种方法可能不会非常强大,因为类型检查器可以显着地重新检查被类型检查的树,因此您无法在封闭树的封闭树中找到post-typer c.macroApplication
。我记得有人遇到过这些问题,但我自己并没有尝试过这种方法。