关于if和when的用法

时间:2017-01-30 06:47:39

标签: clojure

在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)))))

一个微不足道的问题。我理解ifwhen之间的区别(我已经阅读了when的来源)。我在这里试图理解的是为什么他们在when的定义中使用if而不是assert-args?在我看来,在这里使用if是可以的。

0 个答案:

没有答案