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

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

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

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

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

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

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

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

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

没有使用有序地图的原因

>他们没有方便的文字
> vanilla Clojure没有有序的地图
除了通过排序键排序的一个(这将是奇怪的).

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

转载注明原文:为什么Clojure向量用于传递键值对? - 代码日志