19

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

4

2 回答 2

24

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

在我的脑海中,打印的 AST 的细化由-Yshow-trees-compact-Yshow-trees-stringified-Xprint-types和. 您可以通过运行和(或在https://github.com/scala/scala/blob/2.10.x/src/compiler/scala/tools/nsc/settings/ScalaSettings.scala检查 scala 设置的来源来找到其他 gem )。-uniqid-Yshow-symkindsscala -Xscala -Y

此外,尽管本质上是一个宏,但具体化有自己的跟踪机制,可以通过-Yreify-copypaste和配置-Yreify-debug

于 2012-07-26T21:47:44.980 回答
2

Macrocosm 的 desugar可以显示您的源代码(包括但不限于宏)是如何转换成的。

    println("TRANSFORMATION:\n"+ desugar{
        println("a string") 
        MY_MACRO("something")
    })
于 2012-07-26T21:10:07.667 回答