假设我想复制一个像@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)?
答案 0 :(得分:5)
看看c.prefix
。它将包含与new expand(Int)
对应的树。
另一个选项是c.macroApplication
,new expand(Int).macroTransform(...)
。
答案 1 :(得分:0)
看起来我可以通过执行以下操作来伪装它:
class expandArgs(args: Any*) extends Annotation with StaticAnnotation
def foo[@expand @expandArgs(Int) T] = 4