我正在浏览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)))
为什么用这种不太常见的方式写出实际的宏?