当注释的参数是常量时,我获得了成功,例如:
@Annotation(2)
class AnnotatedClass
因为我可以使用以下内容获取宏impl
中的值
c.prefix.tree match {
case Apply(_, List(Literal(Constant(x)))) => x.toInt
}
但是当注释的论证不是常数时,我很难过,比如:
object Obj {val n = 2}
@Annotation(Obj.n)
class AnnotatedClass
与this question中的错误开始类似,我可以再次匹配c.prefix.tree
并提取名称Obj
和n
,但如何获取Obj.n
?
答案 0 :(得分:5)
不幸的是,目前这几乎是不可能的。我们的宏系统基本上不支持树的评估(我们有c.eval
,但它当前的实现很慢,只能使用文字参数可靠地工作)。这是我们在Project Palladium中尝试过的事情之一。