当宏观时

时间:2012-08-03 22:03:15

标签: clojure

我正在浏览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)))

为什么用这种不太常见的方式写出实际的宏?

1 个答案:

答案 0 :(得分:68)

core.clj是从上到下构建的,从Java提供的内容开始,并为Clojure提供所有要求。定义when时,语法引用尚不存在 when宏在core.clj的line 456上定义,并且在line 682. when宏用于定义语法引用