Clojure:为什么(进入{}'((1 2)(3 4)))失败?

Mar*_*tus 7 clojure

我知道Clojure列表和向量大多是可以互换的,并且使用一个或另一个与插入顺序conj或者在向量的情况下不需要引用之类的东西有关.

那为什么呢

(into {} '( (1 2) (3 4))) 
Run Code Online (Sandbox Code Playgroud)

失败,而

(into {} '( [1 2] [3 4]))
Run Code Online (Sandbox Code Playgroud)

成功?

mik*_*era 6

这是如何实现地图的工件.

java.util.Map.Entry通过许多Clojure函数在概念上将映射视为元素序列.碰巧APersistentMap.java中有特殊的案例代码将长度为2的向量作为映射条目(在APersistentMap.cons中)处理,但不是用于列表.

可以说,给矢量这种特殊处理是合理的,因为它们是在代码中表示地图输入文字的一种方便的形式.所以你可以写下面的东西:

(conj {} [:a 1])
=> {:a 1}
Run Code Online (Sandbox Code Playgroud)