【发布时间】:2012-07-26 20:35:01
【问题描述】:
我正在 Scala 中编写一个宏,但是当我调用它时,我收到一条错误消息,提示“Double 不接受参数”。很明显,宏构建 AST 的方式有问题。那么我怎样才能看到扩展的宏呢?有没有办法在运行时调用宏实现?
【问题讨论】:
标签: scala macros scala-2.10
我正在 Scala 中编写一个宏,但是当我调用它时,我收到一条错误消息,提示“Double 不接受参数”。很明显,宏构建 AST 的方式有问题。那么我怎样才能看到扩展的宏呢?有没有办法在运行时调用宏实现?
【问题讨论】:
标签: scala macros scala-2.10
为编译器提供-Ymacro-debug-lite 或-Ymacro-debug-verbose 选项。
在我的脑海中,打印的 AST 的细化由 -Yshow-trees-compact、-Yshow-trees-stringified、-Xprint-types、-uniqid 和 -Yshow-symkinds 管理。您可以通过运行 scala -X 和 scala -Y 找到其他 gem(或在 https://github.com/scala/scala/blob/2.10.x/src/compiler/scala/tools/nsc/settings/ScalaSettings.scala 检查 scala 设置的来源)。
此外,尽管实质上是一个宏,但具体化有其自己的跟踪机制,可以由-Yreify-copypaste 和-Yreify-debug 配置。
【讨论】:
Macrocosm's desugar 可以显示您的源代码(包括但不限于宏)是如何转换成的。
println("TRANSFORMATION:\n"+ desugar{
println("a string")
MY_MACRO("something")
})
【讨论】: