4
我偶然發現partial
函數的實現在cojure.core
。它看起來像這樣:爲什麼這樣實現clojure.core中的部分
(defn partial
"Takes a function f and fewer than the normal arguments to f, and
returns a fn that takes a variable number of additional args. When
called, the returned function calls f with args + additional args."
{:added "1.0"
:static true}
([f] f)
([f arg1]
(fn [& args] (apply f arg1 args)))
([f arg1 arg2]
(fn [& args] (apply f arg1 arg2 args)))
([f arg1 arg2 arg3]
(fn [& args] (apply f arg1 arg2 arg3 args)))
([f arg1 arg2 arg3 & more]
(fn [& args] (apply f arg1 arg2 arg3 (concat more args)))))
爲什麼它有幾個奇偶校驗選項,如果它可以有一個?它只是性能優化,所以concat
不會在大多數情況下被調用?
我的意思是它可能看起來像這樣,否則,對不對?
(defn partial
([f] f)
([f & more]
(fn [& args] (apply f (concat more args))))
)
我還注意到其他一些功能遵循相同的模式。