作为 Clojure 的新手,向量(类似数组)和映射(键值对)之间的区别最初对我来说似乎很清楚。
但是,在很多情况下(例如“let”特殊形式和带有关键字参数的函数),向量用于传递键值对。
The source code for let甚至包括检查以确保向量包含偶数个元素。
我真的不明白为什么用矢量图而不是 map 。当我阅读有关集合类型的内容时,我希望映射是以键值格式存储任何信息的首选方式。
谁能解释一下为什么向量似乎也是表达键值对的首选工具?
最佳答案
Clojure IRC channel 的优秀人士向我解释了主要原因:映射(哈希)未排序。
例如,let 形式允许反向引用,如果参数的顺序不稳定,这可能会中断:
(let [a 1 b (inc a)] (+ a b))
没有使用有序映射的原因
- 他们没有方便的文字
- vanilla Clojure 没有有序映射 除了一个按排序键排序的(这很奇怪)。
因此,保持参数顺序的需要胜过它们是键值对这一事实。
关于clojure - 为什么 Clojure 向量用于传递键值对?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36234812/