关于 - >>的来源

dam*_*onh 6 clojure

我正在浏览clojure.core的来源:

(defmacro ->>
  [x & forms]
  (loop [x x, forms forms]
    (if forms
      (let [form (first forms)
            threaded (if (seq? form)
                       (with-meta `(~(first form) ~@(next form)  ~x) (meta form))
                       (list form x))]
        (recur threaded (next forms)))
      x)))
Run Code Online (Sandbox Code Playgroud)

在第7行,为什么不呢

(with-meta `(~@form  ~x) (meta form))
Run Code Online (Sandbox Code Playgroud)

ama*_*loy 7

这几乎相当,但并不完全相同.考虑如果形式(错误)会发生什么().如上所述,此错误在编译时捕获,因为它是非法的评估(nil x).通过您提出的简化,错误将在运行时被注意到,或者可能永远不会在x没有参数的情况下发生.

撇开正确性,它对可读性也更好,因为它强调将调用表单的第一个,其余作为参数.它的实现也是一个更好的对称性->.