如何在Scala中打印扩展宏?

如何在Scala中打印扩展宏?,scala,macros,scala-2.10,Scala,Macros,Scala 2.10,我正在用Scala编写一个宏,但当我调用它时,会收到一条错误消息,说“Double不接受参数”。显然,宏构建AST的方式有问题。那么如何才能看到展开的宏呢?有没有一种方法可以在运行时调用宏实现?有一种方法可以显示如何将源代码(包括但不限于宏)转换为 println("TRANSFORMATION:\n"+ desugar{ println("a string") MY_MACRO("something") }) 向编译器提供-Ymacro-de

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

有一种方法可以显示如何将源代码(包括但不限于宏)转换为

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

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

不经意间,打印AST的去目标化由
-Yshow trees compact
-Yshow trees stringized
-Xprint types
-uniqid
-Yshow symtries
控制。您可以通过运行
scala-X
scala-Y
来查找其他gem(或查看位于的scala设置源)


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

进行配置。我刚刚试过,但由于扩展的宏不进行类型检查,所以在调用desugar时也不会进行类型检查。对不起,我只是注意到我确实误解了你的问题。如果我的_宏失败,我的示例将无法编译!在这种情况下,到目前为止,我在Eclipse中使用了scala.reflect.makro.FrontEnds#echo(),这相当于用println()调试运行时的痛苦。。。总比什么都没有好:)这有一点帮助,但是必须有一种方法来查看整个生成的树。但是回到错误,它不是一个Apply(Double,…)而不是Apply(Double.Apply,…)吗?