Scalaで拡張マクロを印刷するにはどうすればよいですか。
-
12-12-2019 - |
質問
スカラでマクロを書いていますが、私が呼び出すと、 "doubleはパラメータを取らない"というエラーメッセージが表示されます。明らかにマクロがどのようにASTを構築するかに問題があります。それでは、どのように拡張されたマクロを見ることができますか?実行時にマクロ実装を呼び出す方法はありますか?
解決
は、コンパイラに-Ymacro-debug-lite
または-Ymacro-debug-verbose
オプションを提供します。
私の頭の上から、プリントされたASTのテラレーションは、-Yshow-trees-compact
、-Yshow-trees-stringified
、-Xprint-types
、-uniqid
、および-Yshow-symkinds
によって管理されています。scala -X
とscala -Y
を実行して、他の宝石を見つけることができます(または https://github.com/scala/scala/blob/2.10.x/src/compiler/scala/tools/nsc/settings/Scalasettings.Scala )
また、本質的にマクロであるにもかかわらず、reificationには、-Yreify-copypaste
と-Yreify-debug
によって設定できる独自のトレースメカニズムがあります。
他のヒント
MacrocosmのDesugar は、マクロを含むがこれに限定されない、ソースコードがどのように変換されているかを示すことができます。
println("TRANSFORMATION:\n"+ desugar{
println("a string")
MY_MACRO("something")
})
. 所属していません StackOverflow