繁体   English   中英

解析 scala 宏中的类型投影

[英]Resolve type projection in scala macro

考虑以下特征:

sealed trait Test

//Test's branches

trait Base {
    type Action = Test
}

现在我需要获得一个ClassSymbolTest ,将其称为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM