为什么Clojure向量用于传递键值对?

Vin*_*tDM 3 clojure clojurescript

作为Clojure的新手,矢量(类似数组)和地图(键值对)之间的区别最初对我来说似乎很清楚.

但是,在很多情况下(例如"let"特殊形式和带有关键字参数的函数),矢量用于传递键值对.

let的源代码甚至包括一个检查,以确保向量包含偶数个元素.

我真的不明白为什么使用矢量而不是地图.当我读到集合类型时,我希望映射是以键值格式存储任何信息的首选方式.

任何人都可以解释为什么矢量似乎也是表达键和值对的首选工具?

Vin*_*tDM 5

Clojure IRC频道的精彩人物向我解释了主要原因:地图(哈希)没有订购.

例如,let表单允许反向引用,如果参数的顺序不稳定,则可能会中断:

(let [a 1 b (inc a)] (+ a b))
Run Code Online (Sandbox Code Playgroud)

没有使用有序地图的原因

  1. 他们没有方便的文字
  2. vanilla Clojure没有有序的地图,除了按排序键排序的地图(这很奇怪).

因此,需要保持参数的顺序胜过它们是键值对的事实.