作为Clojure的新手,矢量(类似数组)和地图(键值对)之间的区别最初对我来说很清楚。
但是,在很多情况下(例如“let”特殊形式和带有关键字参数的函数),矢量用于传递键值对。
The source code for let甚至包括检查以确保向量包含偶数个元素。
我真的不明白为什么使用矢量而不是地图。当我读到集合类型时,我希望地图是以键值格式存储任何信息的首选方式。
有人可以解释为什么矢量似乎也是表达键和值对的首选工具吗?
答案 0 :(得分:5)
Clojure IRC频道的精彩人物向我解释了主要原因:地图(哈希)未订购。
例如,let表单允许反向引用,如果参数的顺序不稳定,则可能会中断:
(let [a 1 b (inc a)] (+ a b))
未使用有序地图的原因
因此,需要保持参数的顺序胜过它们是键值对的事实。