如果我对Clojure映射的'pr-str'计算CID,它是否是唯一的?
我想知道Clojure地图在送入摘要函数时是否可能产生非唯一的哈希值。
这取决于摘要,而不是映射,这是Clojure的事实,或者你使用了pr-str。
根据定义,任何合理的摘要都是一个有损函数,因此它总是允许冲突,即使某些摘要的概率极低。
在我的代码中,我首先写了 :one。
但它们是否总是按照这样的顺序来?
散列集合/映射的顺序是未定义的。但对于同一个对象来说,它们是相同的。
然而,即使内容相同,不同的对象也可能不同
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中的集合和映射,和其他事情一样,是可调用的——就是这样。