在定义Scala宏时,无论如何都要从符号或类型转到树

时间:2014-03-02 11:48:11

标签: scala scala-macros scala-macro-paradise

在定义Scala宏时,无论如何都要从符号或类型转到树?

具体而言,该场景需要在配对对象上查找文字。

在scala代码中,这看起来像这样:

class Fred(a: String)

object Fred {
  val FredDescription = "hello"
}

在宏中,我可以访问Fred的WeakTypeTag,并且可以使用它来访问随播广告及其类型签名:

context.universe.weakTypeOf[A].typeSymbol.companionSymbol.typeSignature

但是我看不到任何访问文字或树的方法来匹配伴侣对象的文字。

这可能吗?为某些任意类型或符号获取树是否有技巧?

1 个答案:

答案 0 :(得分:2)

在某些情况下可能会出现这种情况,例如:当类型在您调用宏的同一文件中定义时,但在一般情况下我不希望这样。

这是因为您正在检查的类型或符号可能来自已编译的类文件。在这种情况下,您正在寻找的树根本不存在。