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

Why are Clojure vectors used to pass key-value pairs?

作为 Clojure 的新手,向量(类似数组)和映射(键值对)之间的区别最初对我来说似乎很清楚。

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

The source code for let 甚至包括检查以确保向量包含偶数个元素。

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

谁能解释一下为什么向量似乎也是表达键值对的首选工具?

Clojure IRC 频道的优秀人士向我解释了主要原因:映射(散列)未排序

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

(let [a 1 b (inc a)] (+ a b))

没有使用有序地图的原因

  1. 他们没有方便的文字
  2. vanilla Clojure 没有有序映射 除了一个按排序键排序的(这很奇怪)。

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