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

有帮助吗?

解决方案

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

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

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

其他提示

Macrocosm的desugar ,它可以展示您的源代码如何,包括但没有限于宏,转换为。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top