Wie drucke ich ein erweitertes Makro in Scala?
-
12-12-2019 - |
Frage
Ich schreibe ein Makro in Scala, aber wenn ich es aufrufe, erhalte ich die Fehlermeldung „Double akzeptiert keine Parameter“.Offensichtlich stimmt etwas nicht mit der Art und Weise, wie das Makro den AST erstellt.Wie kann ich das erweiterte Makro sehen?Gibt es eine Möglichkeit, die Makroimplementierung zur Laufzeit aufzurufen?
Lösung
Bieten -Ymacro-debug-lite
oder -Ymacro-debug-verbose
Option für den Compiler.
Spontan wird die Detaillierung gedruckter ASTs durch geregelt -Yshow-trees-compact
, -Yshow-trees-stringified
, -Xprint-types
, -uniqid
Und -Yshow-symkinds
.Sie können andere Edelsteine finden, indem Sie rennen scala -X
Und scala -Y
(Oder Überprüfen der Quellen der Scala-Einstellungen unter https://github.com/scala/scala/blob/2.10.x/src/compiler/scala/tools/nsc/settings/ScalaSettings.scala).
Auch wenn es sich im Wesentlichen um ein Makro handelt, verfügt die Verdinglichung über einen eigenen Ablaufverfolgungsmechanismus, der von konfiguriert werden kann -Yreify-copypaste
Und -Yreify-debug
.
Andere Tipps
Es gibt Makrocosms DeSugar , der zeigen kann, wie Ihr Quellcode, einschließlich, aber keine beschränkt auf Makros, in umgewandelt wird. generasacodicetagpre.