如何在 Scala 的宏注解中访问泛型类型?
How do I access generic type in Macro Annotation in Scala?
我有以下代码:
@compileTimeOnly("enable macro paradise to expand macro annotations")
class typedTable[T] extends StaticAnnotation {
def macroTransform(annottees: Any*): Table = macro TableGenerator.impl[T]
}
object TableGenerator {
def impl[T](c: whitebox.Context)(annottees: c.Expr[Any]*): c.Expr[Table] = {
import c.universe._
val tpe = weakTypeOf[T] // This doesn't work
...
}
}
而且我似乎无法弄清楚如何在宏注释中访问 'T' 的 TypeTag。我看到其他帖子模糊地提到了如何访问它,但我似乎无法弄清楚在这种情况下我应该如何访问它。
宏注释不对其参数进行类型检查,这意味着您只能从这些参数中获取树,而不是它们的类型。为了获得表示宏注释类型参数的树,请调用 c.macroApplication
并适当地对其进行解构。
我有以下代码:
@compileTimeOnly("enable macro paradise to expand macro annotations")
class typedTable[T] extends StaticAnnotation {
def macroTransform(annottees: Any*): Table = macro TableGenerator.impl[T]
}
object TableGenerator {
def impl[T](c: whitebox.Context)(annottees: c.Expr[Any]*): c.Expr[Table] = {
import c.universe._
val tpe = weakTypeOf[T] // This doesn't work
...
}
}
而且我似乎无法弄清楚如何在宏注释中访问 'T' 的 TypeTag。我看到其他帖子模糊地提到了如何访问它,但我似乎无法弄清楚在这种情况下我应该如何访问它。
宏注释不对其参数进行类型检查,这意味着您只能从这些参数中获取树,而不是它们的类型。为了获得表示宏注释类型参数的树,请调用 c.macroApplication
并适当地对其进行解构。