我在文档和网络上都找不到解释,为什么有两个不同的函数似乎做的事情几乎一样,除了一个接收集合,另一个接收参数列表(但这可以通过使用(apply hash-set coll)
轻松解决)。
我在文档和网络上都找不到解释,为什么有两个不同的函数似乎做的事情几乎一样,除了一个接收集合,另一个接收参数列表(但这可以通过使用(apply hash-set coll)
轻松解决)。
vector
和 vec
相同。但对于映射和列表来说并不完全相同。(vector 0 1 2) => [0 1 2]
(apply vector (range 3)) => [0 1 2]
(vec (range 3)) => [0 1 2]
(hash-set 0 1 2) => #{0 1 2}
(apply hash-set (range 3)) => #{0 1 2}
(set (range 3)) => #{0 1 2}
(hash-map :a 1 :b 2) => {:b 2, :a 1}
(apply hash-map [:a 1 :b 2]) => {:b 2, :a 1}
(into {} [[:a 1] [:b 2]]) => {:a 1, :b 2}
(list 0 1 2) => (0 1 2)
(apply list (range 3)) => (0 1 2)
(into (list) (range 3)) => (2 1 0) ; *** reversed order ***
因为我们可以用另一个来定义每个元素:
(defn hash-set [& args]
(clojure.core/set args))
或者
(defn set [coll]
(apply clojure.core/hash-set coll))
很可能两者是分别定义的,以提高速度。