2014-03-02 17 views
2

定义Scala宏时,是否有符号或类型转换为树?无论如何,当定义Scala宏时从符号或类型转到树

具体来说,该场景需要查找伴随对象上的文字。

在Scala代码,这看起来是这样的:

class Fred(a: String) 

object Fred { 
    val FredDescription = "hello" 
} 

在宏我有机会获得弗雷德的WeakTypeTag,可以用它来获取访问的伴侣,它的类型签名:

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

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

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

回答

2

在某些情况下,这可能是可能的,例如,当类型在调用宏的同一个文件中定义时,但通常情况下我并不期望。

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

+1

在我们的实验性nextgen宏系统中,我们正在考虑为您编译的程序保存AST,以便您始终可以获取您可能感兴趣的程序元素的AST:http://scalamacros.org/news/2014/ 3月2日/项目palladium.html。 –

相关问题