Если я сделаю, например:
(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)))