我觉得在与宏 if
和 cond
配对时,我们遗漏了 if-let
的配对宏
(defmacro cond-let
[& clauses]
(when clauses
(if (next clauses)
(list 'if-let (first clauses)
(second clauses)
(cons 'cond-let (nnext clauses)))
(first clauses))))
(cond-let [a nil] {:a a}
[b false] {:b b}
:default)
我没有找到有关过去是否讨论过这种变体 cond-let
(不引入很多新的语法) 宏的记录,但总的来说,它看起来对 clojure.core 是自然而然的。