Как распечатать расширенный макрос в Scala?
-
12-12-2019 - |
Вопрос
Я пишу макрос в 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")
})
.