Comment imprimer une macro développée dans Scala ?
-
12-12-2019 - |
Question
J'écris une macro dans Scala, mais lorsque je l'appelle, je reçois un message d'erreur disant "Le double ne prend pas de paramètres".Il est clair qu'il y a quelque chose qui ne va pas dans la façon dont la macro construit l'AST.Alors, comment puis-je voir la macro développée ?Existe-t-il un moyen d'appeler l'implémentation de la macro au moment de l'exécution ?
La solution
Fournir -Ymacro-debug-lite
ou -Ymacro-debug-verbose
option au compilateur.
De mémoire, la détalisation des AST imprimés est régie par -Yshow-trees-compact
, -Yshow-trees-stringified
, -Xprint-types
, -uniqid
et -Yshow-symkinds
.Vous pouvez trouver d'autres joyaux en exécutant scala -X
et scala -Y
(ou en inspectant les sources des paramètres scala à https://github.com/scala/scala/blob/2.10.x/src/compiler/scala/tools/nsc/settings/ScalaSettings.scala).
De plus, bien qu'elle soit essentiellement une macro, la réification possède son propre mécanisme de traçage qui peut être configuré par -Yreify-copypaste
et -Yreify-debug
.
Autres conseils
Il y a La descendarde de Macrocosm qui peut montrer comment votre code source, y compris, mais pas de limité aux macros, est transformé en.
println("TRANSFORMATION:\n"+ desugar{
println("a string")
MY_MACRO("something")
})