clojure - 在 Clojure 中,向量是特定的 HashMap 吗?

标签 clojure

在“Programming Clojure”中,有一个在向量上使用 get 函数的示例:

(get [:a :b :c] 1)
-> :b

我调用了(doc get),看起来get函数将hashmap作为参数而不是向量,所以我怀疑向量是否是某种hashmap。我记得 HashMap 可以采用索引整数,并返回与该索引匹配的值,所以我这样做是为了看看向量是否可以做同样的事情:

([1 2 3 4] 1)
-> 2

它确实返回了值 2,该值位于 [1 2 3 4] 中的索引 1 处。

这是否意味着向量是一个 HashMap ,其键值对是索引值对?

最佳答案

不,底层实现不同。

话虽如此,由于逻辑上向量确实将索引映射到元素,因此它们是 Clojure 中的关联结构,并且可以与 get 一起使用, contains?assoc (尽管对于 assoc 只能使用向量末尾从 0 到 1 的索引)。它们不能与 dissoc 一起使用不过——这是一个“真实的 map ”操作。

此外,向量在用作函数时与映射的行为不同:将映射作为函数调用相当于将其与 get 一起使用。 ,而调用向量相当于使用 nth 。不同的是nth抛出索引越界异常(以及不可能是索引的参数,例如负数或非数字),而 get返回nil .

关于clojure - 在 Clojure 中,向量是特定的 HashMap 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16879456/

相关文章:

scala - Clojure REPL 和 Scala REPL 有什么区别?

csv - 如何在 Clojure 中持续监控文件的内容?

emacs - 使用 leiningen 和 swank/slime 在 emacs 中运行 clojure 测试时停止无限循环

clojure - 从 nrepl.el 打印到 repl-y,反之亦然

macros - clojure 宏 if-empty?

google-app-engine - 在 Google AppEngine 上进行 Clojure 开发的良好起点是什么

clojure - 在 clojure 中的全局映射中附加值

macros - 如何编写宏自动解析符号

java - 在 Clojure 中使用 java.nio.Paths 会引发奇怪的异常

algorithm - Glissando 函数,其参数是 codomain 的极端