在clojure.core的来源:
(def meta (fn ^:static meta [x]
(if (instance? clojure.lang.IMeta x)
(. ^clojure.lang.IMeta x (meta)))))
(defmacro ^{:private true} assert-args
[& pairs]
`(do (when-not ~(first pairs)
(throw (IllegalArgumentException.
(str (first ~'&form) " requires " ~(second pairs) " in " ~'*ns* ":" (:line (meta ~'&form))))))
~(let [more (nnext pairs)]
(when more
(list* `assert-args more)))))
一个微不足道的问题。我理解if
和when
之间的区别(我已经阅读了when
的来源)。我在这里试图理解的是为什么他们在when
的定义中使用if
而不是assert-args
?在我看来,在这里使用if
是可以的。