如何在Scala中打印扩展的宏?

时间:2012-07-26 20:35:02

标签: scala macros scala-2.10

我在Scala中编写一个宏,但是当我调用它时,我收到一条错误消息,说“Double不接受参数”。显然,宏构建AST的方式有问题。那我怎么能看到扩展的宏呢?有没有办法在运行时调用宏实现?

2 个答案:

答案 0 :(得分:19)

为编译器提供-Ymacro-debug-lite-Ymacro-debug-verbose选项。

脱离我的头脑,打印AST的分离由-Yshow-trees-compact-Yshow-trees-stringified-Xprint-types-uniqid-Yshow-symkinds决定。您可以通过scala -Xscala -Y(或检查https://github.com/scala/scala/blob/2.10.x/src/compiler/scala/tools/nsc/settings/ScalaSettings.scala处的scala设置来源)找到其他宝石。

此外,尽管本质上是一个宏,但是reification有自己的跟踪机制,可以由-Yreify-copypaste-Yreify-debug进行配置。

答案 1 :(得分:2)

Macrocosm's desugar可以显示您的源代码(包括但不限于宏)的转换方式。

    println("TRANSFORMATION:\n"+ desugar{
        println("a string") 
        MY_MACRO("something")
    })