我知道Clojure列表和向量大多是可以互换的,并且使用一个或另一个与插入顺序conj
或者在向量的情况下不需要引用之类的东西有关.
那为什么呢
(into {} '( (1 2) (3 4)))
Run Code Online (Sandbox Code Playgroud)
失败,而
(into {} '( [1 2] [3 4]))
Run Code Online (Sandbox Code Playgroud)
成功?
这是如何实现地图的工件.
java.util.Map.Entry
通过许多Clojure函数在概念上将映射视为元素序列.碰巧APersistentMap.java中有特殊的案例代码将长度为2的向量作为映射条目(在APersistentMap.cons中)处理,但不是用于列表.
可以说,给矢量这种特殊处理是合理的,因为它们是在代码中表示地图输入文字的一种方便的形式.所以你可以写下面的东西:
(conj {} [:a 1])
=> {:a 1}
Run Code Online (Sandbox Code Playgroud)