Вопрос

Я пишу макрос в Scala, но при его вызове получаю сообщение об ошибке: «Double не принимает параметры».Очевидно, что-то не так с тем, как макрос строит AST.Так как же мне увидеть развернутый макрос?Есть ли способ вызвать реализацию макроса во время выполнения?

Это было полезно?

Решение

Предоставлять -Ymacro-debug-lite или -Ymacro-debug-verbose вариант для компилятора.

Мне пришло в голову, что детализация печатных AST регулируется -Yshow-trees-compact, -Yshow-trees-stringified, -Xprint-types, -uniqid и -Yshow-symkinds.Вы можете найти другие драгоценные камни, запустив scala -X и scala -Y (или проверив источники настроек Scala по адресу https://github.com/scala/scala/blob/2.10.x/src/compiler/scala/tools/nsc/settings/ScalaSettings.scala).

Кроме того, несмотря на то, что реификация по сути является макросом, она имеет собственный механизм трассировки, который можно настроить с помощью -Yreify-copypaste и -Yreify-debug.

Другие советы

Есть Macrocosm's Desugar , который может показать, как ваш исходный код, в том числе, но не ограничивается MACROS, преобразуется в.

    println("TRANSFORMATION:\n"+ desugar{
        println("a string") 
        MY_MACRO("something")
    })
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top