如果我对clojure地图中'pr-str'的CID进行计算,它是唯一的吗?
我想知道 Clojure 映射提供给摘要函数时是否可能有非唯一的哈希值。
这取决于摘要,而不是地图,这与Clojure有关,或者您使用了`pr-str`。
按照定义,任何合理的摘要都是一种损耗函数,因此它总是允许冲突,即使某些摘要的概率极小。
我在我的代码中首先编写了 :one。
但它总是在 :two 之前出现吗?
哈希集合/映射的顺序是未定义的。但对于相同的对象来说,它是相同的。
然而,即使内容相同,它们对于不同的对象可能会有所不同
user=> (mapv hash [0 0.])
[0 0]
user=> (pr-str (hash-map 0 0 0. 0))
"{0 0, 0.0 0}"
user=> (pr-str (hash-map 0. 0 0 0))
"{0.0 0, 0 0}"
如果运行上述代码,它是否会始终返回一个唯一的值?
根据上述内容,这并不能保证。对于像摘要这样的损耗函数,绝对不能保证。
我设想Clojure映射是带有特殊`bind`或`>>=`操作符的集合,该操作符使得使用集合的一个元素调用它时返回绑定到该元素的内容。
这似乎与问题无关。但不是的,在Clojure的集合和映射方面,没有特别之处,Clojure也不具有操作符。
Clojure中的集合和映射,与一些其他事物相关,是可调用的——就是这样简单。