我真的很想知道为什么vector的实现如此冗长?它不能做的原因是什么[],[a]并且[a & args]?
这是我得到的clj-1.4.0.
=> (source vector)
(defn vector
"Creates a new vector containing the args."
{:added "1.0"
:static true}
([] [])
([a] [a])
([a b] [a b])
([a b c] [a b c])
([a b c d] [a b c d])
([a b c d & args]
(. clojure.lang.LazilyPersistentVector (create (cons a (cons b (cons c (cons d args))))))))
nil
Run Code Online (Sandbox Code Playgroud)
Art*_*ldt 10
前几个案例有直接调用使它们更快,因为它们是最常见的.使用多个参数调用它的极少数情况可能需要更多调用,因此需要更多时间,但这使常见案例简洁.这是一种刻意的速度,冗长的权衡.它还可以通过查看参数列表清楚地使用该函数,而不会使人们的IDE与大量的arity混淆.
Clojure的大部分核心功能都有类似的签名.