如何将参数传递给Scala宏注释impl?

时间:2014-03-21 08:49:59

标签: scala annotations scala-macros

当注释的参数是常量时,我​​获得了成功,例如:

@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并提取名称Objn,但如何获取Obj.n

1 个答案:

答案 0 :(得分:5)

不幸的是,目前这几乎是不可能的。我们的宏系统基本上不支持树的评估(我们有c.eval,但它当前的实现很慢,只能使用文字参数可靠地工作)。这是我们在Project Palladium中尝试过的事情之一。