【问题标题】:How do I access generic type in Macro Annotation in Scala?如何在 Scala 的宏注解中访问泛型类型?
【发布时间】:2015-07-18 20:43:36
【问题描述】:

我有以下代码:

@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。我看到其他帖子模糊地提到了如何访问它,但我似乎无法弄清楚在这种情况下我应该如何访问它。

【问题讨论】:

    标签: scala generics macros annotations


    【解决方案1】:

    宏注解不对它们的参数进行类型检查,这意味着您只能从这些参数中获取树,而不是它们的类型。为了获得代表宏注释的类型参数的树,请调用 c.macroApplication 并适当地对其进行解构。

    【讨论】:

    • 我很抱歉,但我对宏还是很陌生,你能解释一下我需要做什么吗?我想遍历主构造函数中的字段,假设 T 是一个案例类。
    • 看看这个:stackoverflow.com/questions/19379436/…,希望这能回答你的问题。如果您遇到困难,请随时询问更多信息。
    猜你喜欢
    • 2012-01-04
    • 2014-10-30
    • 2021-04-09
    • 2013-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-10
    相关资源
    最近更新 更多