在“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/