【发布时间】:2021-04-02 12:30:09
【问题描述】:
我正在尝试编写一个宏,它返回作为类型参数传递的文字类型的值,如果参数不是文字类型,则无法编译。以下是一些示例:
def literalValue[SC <: String] = //...
literalValue["AB"] // returns "AB"
literalValue["C"] // returns "C"
literalValue[String] // compile error
所以我从一个常规的宏样板开始,遇到了以下问题:
def implStringLiteral[SC <: String: c.WeakTypeTag](c: blackbox.Context): c.Expr[SC] = {
import c.universe._
val symbol = weakTypeOf[SC].typeSymbol //It is String
//...
}
似乎文字类型本身是作为常规String 传递的,因此无法通过其WeakTypeTag 获得精确的类型信息。
有什么办法可以解决这个问题吗?
【问题讨论】:
标签: scala metaprogramming scala-macros