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

欢迎!请查阅 关于页面 了解关于如何使用本站的一些更多信息。

0
Clojure

{{clojure.data/diff}} 在第 118 行定义了

java.util.Map (diff-similar [a b] (diff-associative a b (set/union (keys a) (keys b))))

由于 {{keys}} 返回一个键序列,这似乎像是一个错误。{{clojure.set/union}} 对于非集合对象表现得奇怪且不一致,并且在这种情况下,两个键序列被连接起来。根据初步的基准测试,这似乎表明这个(可能是)错误在图(可能)键(可能)不具有共同属性时会产生轻微的性能提升,而当图(可能)属性相同时,可能会造成显著的性能损失。由于在 {{diff-associative}} 中的合并 reduce,结果仍然正确。

补丁很简单(只需要对每个键序列调用 set)。

3 个回答

0

评论者:jafingerhut

2012 年 10 月 15 日日期的 clj-1087-diff-perf-enhance-patch-v1.txt 实现了汤姆建议的性能增强,尽管并非完全按照他的建议。它确实计算了两个键序列的并集。

0

评论者:jafingerhut

我建议,这里更大的问题可能是,Clojure依赖于其自己的未记录行为,即 clojure.set/union 在某些非集合参数上也能工作。

0
...