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