2024 年 Clojure 状态调查! 中分享您的想法。

欢迎!请查看 关于页面 获取更多关于此工作方式的信息。

0
data.int-map

Clojure 不可变映射和集合的大多数实现在与 java.util.Map 和 java.util.Set 实例(甚至是可变的)比较时,如果它们当前内容相同,可以返回 true。

提出的一个补丁,用于使 int 集合和 int 映射能够这样操作,其中一个测试用例表明,对于最新的库代码,这并不成立。

我预期在下面的示例 REPL 会话中的所有 .equals 和 = 调用都将返回 true。

`
user=> (def jset1 (java.util.HashSet. [1]))

'user/jset1

user=> (def intset1 (imap/int-set [1]))

'user/intset1

user=> (def cset1 #{1})

'user/cset1

user=> (.equals cset1 jset1)
true
user=> (= cset1 jset1)
true
user=> (.equals jset1 cset1)
true
user=> (= jset1 cset1)
true
user=> (.equals intset1 jset1)
false
user=> (= intset1 jset1)
false
user=> (.equals jset1 intset1)
true
user=> (= jset1 intset1)
false
`

2 答案

0

评论由:jafingerhut 发布

补丁 dimap-16-v1.patch 是解决此问题的一个可能方法,我相信。它是基于 Clojure 内置的集合和映射的 .equals 和 .equiv 方法的相似代码,这些方法针对 java.util.Set 和 java.util.Map 接口进行检查,而 clojure.core/set? 和 clojure.core/map? 则更加严格。

0
参考信息: https://clojure.atlassian.net/browse/DIMAP-16(由jafingerhut报告)
...