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

时间:2016-03-26 11:37:21

标签: clojure clojurescript

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

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

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

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

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

1 个答案:

答案 0 :(得分:5)

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

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

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

未使用有序地图的原因

  1. 他们没有方便的文字
  2. vanilla Clojure没有有序的地图 除了按排序键排序的一个(这很奇怪)。
  3. 因此,需要保持参数的顺序胜过它们是键值对的事实。