2

假设我想复制一个像 @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)?

4

2 回答 2

6

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

另一种选择c.macroApplicationnew expand(Int).macroTransform(...).

于 2013-09-09T06:18:52.340 回答
0

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

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

def foo[@expand @expandArgs(Int) T] = 4
于 2013-09-09T03:26:58.297 回答