¿Cómo imprimo una macro ampliada en Scala?
-
12-12-2019 - |
Pregunta
Estoy escribiendo una macro en Scala, pero cuando lo llamo, recibo un mensaje de error que dice "Double no toma parámetros".Claramente, hay algo malo con la forma en que la macro construye el ast.Entonces, ¿cómo puedo ver la macro expandida?¿Hay alguna manera de llamar a la implementación de macros en Runtime?
Solución
Proporcionar la opción -Ymacro-debug-lite
o -Ymacro-debug-verbose
en el compilador.
Fuera de la parte superior de mi cabeza, la detalización de los ASTS impresos se rige por -Yshow-trees-compact
, -Yshow-trees-stringified
, -Xprint-types
, -uniqid
y -Yshow-symkinds
.Puede encontrar otras gemas ejecutando scala -X
y scala -Y
(o inspeccionando las fuentes de la configuración de Scala en https://github.com/scala/scala/blob/2.10.x/src/compiler/scala/tools/nssc/settings/scalasettings.scala ).
Otros consejos
Hay Desuzar de Macrocosm que puede mostrar cómo su código fuente, que incluye, pero no se limita a macros, se transforma en.
println("TRANSFORMATION:\n"+ desugar{
println("a string")
MY_MACRO("something")
})