【问题标题】:How can I pass an argument to a Scala Macro Annotation impl?如何将参数传递给 Scala 宏注释 impl?
【发布时间】:2014-03-21 17:19:23
【问题描述】:

当注解的参数是常量时,我​​成功了,比如:

@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的值?

【问题讨论】:

    标签: scala annotations scala-macros


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-31
      • 1970-01-01
      • 2018-05-16
      • 2012-05-22
      相关资源
      最近更新 更多