理解什么似乎是clojure中的解构的一个例子

时间:2014-11-28 08:54:46

标签: clojure

以下代码:

(into {} [[:a 1][:b 2][:c 3][:d 4][:e 5]])

...生成关键字/值对的映射(?)。我不太明白双方括号的重要性,我假设它是一个解构的例子?

谢谢,

〜凯特琳

2 个答案:

答案 0 :(得分:7)

这不是destructuring,只是使用into core function的一个例子。

into是一个函数,用于通过重复将第二个集合中的元素添加到带有conj function的第一个集合中来结合两个集合。

因此,(into {} [[:a 1][:b 2]])只是

的同义词
(-> {} (conj [:a 1]) (conj [:b 2]))

答案 1 :(得分:1)

这个答案是对列昂尼德的补充。人们可以将Clojure地图视为"地图条目",键/值对的集合。这些有时被打印,因此它们看起来像2元素向量,尽管它们不是2元素向量。然而,如果你想使用into将某些内容转换为地图,那么你应该以2元素向量的形式传递将转化为地图条目的数据。

=> (def foo {:a 1 :b 2 :c 3})
#'/foo
=> (find foo :b)
[:b 2]
=> (class (find foo :b))
clojure.lang.MapEntry
=> (map identity foo)
([:c 3] [:b 2] [:a 1])
=> (map class (map identity foo))
(clojure.lang.MapEntry clojure.lang.MapEntry clojure.lang.MapEntry)
=> (list [:c 3] [:b 2] [:a 1])
([:c 3] [:b 2] [:a 1])
=> (map class (list [:c 3] [:b 2] [:a 1]))
(clojure.lang.PersistentVector clojure.lang.PersistentVector clojure.lang.PersistentVector)