Ale*_*sev 4 scala scala-macros scala-quasiquotes
我有一个类型resultType的Context.this.type#c#universe#Type.我需要将它与Unit类型相匹配.我试过了
resultType match {
case q"Unit" => ...
}
Run Code Online (Sandbox Code Playgroud)
但我想这Unit只是一个字符串文字,显然不匹配.如何通过quasiqotes匹配类型?
我也尝试过
resultType match {
case TypeRef(ThisType(_), Symbol("scala.Unit"), _) => ...
}
Run Code Online (Sandbox Code Playgroud)
但有一个错误:
[error] pattern type is incompatible with expected type;
[error] found : Symbol
[error] required: Context.this.c.universe.SymbolContextApi
Run Code Online (Sandbox Code Playgroud)
如何以这种方式匹配类型?
Quasiquotes在这种情况下不起作用的主要原因是你不匹配a Tree而不是a Type.这两个是反射API的单独概念,它们并不完全相同.
检查类型是否与您期望使用的typeOf类型相同的简单方法是使用类型相等运算符=:=:
case tpe if tpe =:= typeOf[Unit] =>
Run Code Online (Sandbox Code Playgroud)
当然,这不是唯一的方法.TypeRef如同其他答案所示,还可以匹配并检查其内部符号的相等性.
| 归档时间: |
|
| 查看次数: |
419 次 |
| 最近记录: |