我开发了一个 scala 宏注释,它丰富了具有各种定义的对象(参见 play form 宏)。除其他外,我希望该对象包含类型别名
type WFS = FS[_, _, _, _]
对于不同数量的通配符参数。
我已经尝试通过以下方式提取单个通配符类型的值
q"type WFS = FS[_]" match { q"type WFS = FS[$t]" => t }
并希望在类型参数列表中使用提取的值(例如 q"type WFS = FS[..$tplist]")。然而上面的语句产生了一个错误:
scala> q"type WFS = FS[_]" match { case q"type WFS = FS[$t]" => t }
scala.MatchError: type WFS = FS[_$1] forSome {
<synthetic> type _$1 >: _root_.scala.Nothing <: _root_.scala.Any
} (of class scala.reflect.internal.Trees$TypeDef)
at .<init>(<console>:15)
at .<clinit>(<console>)
at .<init>(<console>:7)
at .<clinit>(<console>)
at $print(<console>)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43
是否有另一种(可能更简单)的方法来构建必要的树?