评论由:carocad
当然,“contains?”的行为不能在这个库内部修复。但是,这个工单是关于将临时集合用作函数的。(见描述示例)
Clojure的transient集合允许在将集合用作函数的情况下查找键。然而,data.int-map在内部始终使用"contains?",无论它是作为函数调用的:[查看源代码](https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/APersistentSet.java#L50)。因此,永远不会调度对"contains?"的调用,这与预期集合的行为不符。
Clojure通过在将集合用作函数时调用"get"函数来处理此用例:[查看源代码](https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/APersistentSet.java#L50)。因此,永远不会调度对"contains?"的调用。
目前int-map集合的行为迫使用户区分正在使用的集合类型,以便正确调用函数。