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

欢迎!请查看关于页面,以了解更多关于如何使用此站点的信息。

0
Clojure

持久队列实现了Sequential接口但未实现java.util.List接口。列表和Sequential都是等价分割,这意味着您可能遇到非传递性等价。

(def q (conj clojure.lang.PersistentQueue/EMPTY 1 2 3)) ;=> #user/q (def al (doto (java.util.ArrayList.) (.add 1) (.add 2) (.add 3))) ;=> #user/al (def v [1 2 3]) ;=> #user/v (= al v) ;=> true (= v q) ;=> true (not= al q) ;=> true

这是因为PersistentQueue是一个Sequential但不是一个列表,ArrayList是一个列表但不是一个Sequential,而PersistentVector既是。

19 答案

0

评论由:jafingerhut

这个问题再次出现,并创建了一个重复的工单CLJ-1374,后来被关闭为这个工单的重复。

0

评论由:jafingerhut

在2014年8月1日和8月10日之间,Clojure master分支上的一些提交与补丁001-clj-1059-make-persistentqueue-implement-list.diff冲突,并且现在无法干净地应用。

0

评论由:jafingerhut

补丁文件 002-clj-1059-asequential-rebased-to-cached-hasheq-v2.patch 与 002-clj-1059-asequential-rebased-to-cached-hasheq.diff 完全相同,但可在截至 2018 年 5 月 23 日最新的 Clojure master 版本上干净地应用。保留了原始补丁的归属信息。

0
参考:[https://clojure.atlassian.net/browse/CLJ-1059](https://clojure.atlassian.net/browse/CLJ-1059)(由 ppotter 报告)
...