如果我计算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中的集合和映射,在其他事项中,是可以调用的——就这样。