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

Jul*_*ers 2 annotations scala scala-macros

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

@Annotation(2)
class AnnotatedClass
Run Code Online (Sandbox Code Playgroud)

因为我可以通过以下方式获取宏中的值impl:

c.prefix.tree match {
  case Apply(_, List(Literal(Constant(x)))) => x.toInt
}
Run Code Online (Sandbox Code Playgroud)

但是当注释的参数不是常数时,我很难过,比如:

object Obj {val n = 2}

@Annotation(Obj.n)
class AnnotatedClass
Run Code Online (Sandbox Code Playgroud)

在假开始类似这样的问题,我可以匹配c.prefix.tree一次拉出名称Objn,但我如何获得的价值Obj.n

Eug*_*ako 5

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