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

标签 clojure clojurescript

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

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

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

我真的不明白为什么用矢量图而不是 map 。当我阅读有关集合类型的内容时,我希望映射是以键值格式存储任何信息的首选方式。

谁能解释一下为什么向量似乎也是表达键值对的首选工具?

最佳答案

Clojure IRC channel 的优秀人士向我解释了主要原因:映射(哈希)未排序

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

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

没有使用有序映射的原因

  1. 他们没有方便的文字
  2. vanilla Clojure 没有有序映射 除了一个按排序键排序的(这很奇怪)。

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

关于clojure - 为什么 Clojure 向量用于传递键值对?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36234812/

相关文章:

clojure - 如何在 Clojure 和 ClojureScript 之间共享协议(protocol)

clojure - 有 Clojurescript 教程吗?

clojure - clojurescript 中的宏 - 无法正确扩展

clojure - 如何在 ClojureScript 的 cljs.core 命名空间中扩展宏

redirect - Compojure/Clojure 路由错误

clojure - 如何在 clojure 中对 langohr RabbitMQ 交互进行 stub ?

clojure - 协议(protocol)中的提示返回类型在 Clojure 中是否有任何影响?

javascript - 为什么 :style on re-frame sometimes used with brackets, 带有大括号,但没有任何内容?

Clojure 警告 : "resultset-seq already exists in clojure.core"

JavaFX bean 与属性——为什么两者都有?