gpt4 book ai didi

macros - Clojure - 如何让我的宏在系统宏之前展开?

转载 作者:行者123 更新时间:2023-12-04 07:44:27 25 4
gpt4 key购买 nike

如果我这样做,例如:

(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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com