假设我们有一个注释:
@scala.annotation.meta.field
class MyAnnotation(param: String => String) extends StaticAnnotation
根据Remi T的回答here,如果param
只是一个String
,我们可以这样提取:
a.tree.children.tail.collect({ case Literal(Constant(id: String)) => id }).headOption
但是我们如何提取和使用 lambda表达式?它是Function(params, body)
,其中params
是参数列表,body
是表示函数体的Tree
。
可以将整个函数Tree
转换为String
然后使用解释器,但这是一个非常难看的解决方案(我甚至无法做到这一点)在实例化解释器期间遇到类路径的一些问题,我找不到任何建议。