作为Clojure的新手,一开始我认为向量(类似于数组)和映射(键值对)之间的区别很清楚。但是在许多情况下(例如“let”特殊形式和带有关键字参数的函数),向量用于传递键值对。 Let的源代码甚至包括一个检查以确保向量包含偶数个元素。我真的不明白为什么要使用向量而不是映射。当我阅读关于集合类型的内容时,我会期望映射是存储任何以键值格式表示的信息的首选方式。是否可以有人解释一下为什么向量也似乎是表达键和值对的首选工具?
亲爱的用户,您好!以下是您需要翻译的内容:
非常友好的Clojure IRC频道上的人向我解释了主要原因:映射(hashes)不是有序的。
例如,let表达式允许反向引用,如果参数顺序不稳定可能会导致错误:
(let [a 1 b (inc a)] (+ a b))
有序映射不被使用的原因:
因此,保持参数顺序的需求胜过它们是键值对的事实。
(let [a 1, a 2] a)
将产生2
。即使((fn [a a] a) 3 4)
也是合法的,结果为4
。 - Thumbnail