Come stampando una macro espansa in Scala?
-
12-12-2019 - |
Domanda
Sto scrivendo una macro in Scala, ma quando lo chiamo ricevo un messaggio di errore che dice "Double non prende i parametri".Chiaramente c'è qualcosa di sbagliato in come la macro costruisce l'AST.Quindi come posso vedere la macro espansa?C'è un modo per chiamare l'implementazione macro in runtime?
Soluzione
Fornire l'opzione -Ymacro-debug-lite
o -Ymacro-debug-verbose
per il compilatore.
Off la parte superiore della testa, la detalizzazione degli AST stampati è regolata da -Yshow-trees-compact
, -Yshow-trees-stringified
, -Xprint-types
, -uniqid
e -Yshow-symkinds
.È possibile trovare altre gemme eseguendo scala -X
e scala -Y
(o ispezionando le fonti di impostazioni Scala a https://github.com/scala/scala/blob/2.10.x/src/compiler/scala/tools/nsc/settings/Scalasettings.Scala ).
Altri suggerimenti
C'è Desugar di Macrocosm che può mostrare come il tuo codice sorgente, incluso, ma non limitato a macro, viene trasformato in.
println("TRANSFORMATION:\n"+ desugar{
println("a string")
MY_MACRO("something")
})
.