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?

¿Fue útil?

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 ).

Además, a pesar de ser esencialmente una macro, la reificación tiene su propio mecanismo de rastreo que se puede configurar por -Yreify-copypaste y -Yreify-debug.

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")
    })

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top