3

我有一个 quaasiquote 匹配器 where q"someMethod[$ts]()"where 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

4

1 回答 1

3

正如您的错误消息所述,ts是一个树列表。更具体地说,这些将是类型树,您可以使用以下tpe方法提取它们的类型:

val types: List[scala.reflect.api.Types#Type] = ts.map(_.tpe)

请注意,我使用的是类型投影,因为Types它既不是包也不是对象,因此Types.Type不起作用。

于 2013-09-15T16:11:54.000 回答