[英]Resolve type projection in scala macro
考虑以下特征:
sealed trait Test
//Test's branches
trait Base {
type Action = Test
}
现在我需要获得一个ClassSymbol
的Test
,将其称为Base#Action
。
这是我的尝试:
def macroImpl[B <: Base: c.WeakTypeTag](c: blackbox.Context): c.Tree = {
import c.universe._
val baseType = weakTypeOf[B].typeSymbol.asType
val actionType = c.typecheck(tq"$baseType#Action", mode = c.TYPEMode)
println(tq"$actionType") //prints pack.age.Base#Action
println(tq"$actionType".symbol) //prints type Action
println(tq"$actionType".symbol.asClass) //raises scala.ScalaReflectionException: type Action is not a class
}
在我的情况下, Base#Action = Test
绝对是 class。
有没有办法通过类型投影从宏实现中引用它的ClassSymbol
?
先试取一棵树的类型
tq"$actionType".tpe.typeSymbol.asClass
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.