Clojure - Как сделать так, чтобы мой макрос разворачивался перед системными макросами?

Если я это сделаю, например:

(defmacro qqq [] '(toString [this] "Qqq"))
(reify Object (qqq))

он не работает из-за reify видит (qqq) вместо ( toString [this] "Qqq") .

Обычное решение - это макрос, который объединяет вызов "reify" с моим собственным, но он длиннее и навязчивее.

Как чтобы мои макросы были сильнее, чем обычные макросы, которые нужно раскрыть в первую очередь?

Ожидается что-то вроде:

(defmacro ^{:priority 100500} qqq [] '(toString [this] "Qqq"))
(reify Object (qqq))

или

(defmacro qqq [] '(toString [this] "Qqq"))
(expand-first #{qqq} (reify Object (qqq)))

8
задан Community 23 May 2017 в 12:30
поделиться