如果我这样做,例如:
(defmacro qqq [] '(toString [this] "Qqq"))
(reify Object (qqq))
它失败是因为
reify
见 (qqq)
而不是 (toString [this] "Qqq")
.usual solution是一个用我自己的东西包装“reify”调用的宏,但它更长,更具侵入性。
如何使我的宏比通常要首先扩展的宏更强大?
期待类似的东西:
(defmacro ^{:priority 100500} qqq [] '(toString [this] "Qqq"))
(reify Object (qqq))
或者
(defmacro qqq [] '(toString [this] "Qqq"))
(expand-first #{qqq} (reify Object (qqq)))
最佳答案
有一个读取器宏可以在读取时(在宏扩展时间之前)评估事物。
(defn qqq [] '(toString [this] "Qqq"))
(reify Object #=(qqq))
我从未在“真实”代码中看到过这种情况,我认为大多数人会认为这是一种黑客行为,但如果您需要它,它就在那里。
关于macros - Clojure - 如何让我的宏在系统宏之前展开?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4984504/