我正在浏览 clojure 源代码,我对 when 宏的定义方式感到惊讶:
user=> (source when)
(defmacro when
"Evaluates test. If logical true, evaluates body in an implicit do."
{:added "1.0"}
[test & body]
(list 'if test (cons 'do body)))
nil
user=>
我原以为它会写成这样:
(defmacro when [test & body] `(if ~test (do ~@body)))
为什么实际的宏是以这种不太常见的方式编写的?