如果计算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中的集合和映射,与其他一些事物一样,是可以调用的 - 就这么简单。