Scala Macro Paradise:如何使用宏注释获取注释的参数?

时间:2013-09-09 03:18:45

标签: scala annotations scala-macros

假设我想复制一个像@specialized(Int)这样的注释 - 我知道这很疯狂 - 使用宏注释。类似的东西:

class expand(expanded: Any*) extends Annotation with StaticAnnotation {
  def macroTransform(annottees: Any*) = macro expand.expandImpl
}

object expand {
 def expandImpl(c: Context)(annottees: c.Expr[Any]*):c.Expr[Any] = {        
    // would like to be able to get access to the "expanded" args above.
    ???
  }
}

// Usage:
 def foo[@expand(Int) T] = 4

有没有办法访问注释的参数(示例中为Int)?

2 个答案:

答案 0 :(得分:5)

看看c.prefix。它将包含与new expand(Int)对应的树。

另一个选项是c.macroApplicationnew expand(Int).macroTransform(...)

答案 1 :(得分:0)

看起来我可以通过执行以下操作来伪装它:

class expandArgs(args: Any*) extends Annotation with StaticAnnotation

def foo[@expand @expandArgs(Int) T] = 4