【发布时间】:2011-06-26 10:49:38
【问题描述】:
如果我这样做,例如:
(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)))
【问题讨论】:
-
很确定 Clojure 中没有这样的机制。
-
@Brian Carper,但我怀疑
expand-first可以在外部实现(后来包含在 Clojure 中)。正在尝试这样做。