我有一个quoasiquote匹配器q"someMethod[$ts]()"
其中def someMethod[I <: shapeless.HList]()"
。
打印ts
给出:
List(shapeless.HNil)
或者,例如
List(String, Int)
然后我尝试分配:
val types: List[scala.reflect.api.Types.Type] = ts
导致编译器错误:
[error] type mismatch;
[error] found : List[_125.u.Tree] where val _125: scala.reflect.api.QuasiquoteCompat.TypeAppliedExtractor{val u: OpTreeContext.this.c.universe.type}
[error] required: List[Context.this.c.universe.Type]
如何从List[scala.reflect.api.Types.Type]
撰写ts
?
答案 0 :(得分:3)
正如您的错误消息所述,ts
是树的列表。更具体地说,这些将是type trees,您可以使用tpe
方法提取其类型:
val types: List[scala.reflect.api.Types#Type] = ts.map(_.tpe)
请注意,我正在使用类型投影,因为Types
既不是包也不是对象,因此Types.Type
将不起作用。