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

欢迎!请查看关于页面以了解更多关于如何工作的信息。

+1
Clojure
编辑

我正在尝试创建一个与Clojure兼容的集合。这是我找到的解决方案

https://gist.github.com/fctorial/201dc99080528b4e626245a29f342361

我已经尽力使其表现得像'PersistentList'。但这个类型的存在一个问题。有时候在这个类型的工作中使用空集合时,会解析为'(nil)'

(seq (ROVec. (byte-array 0)))
=> (nil)
(vec (ROVec. (byte-array 0)))
=> []
(vec (seq (ROVec. (byte-array 0))))
=> []
(lazy-seq (ROVec. (byte-array 0)))
=> (nil)
(vec (lazy-seq (ROVec. (byte-array 0))))
=> [nil]

我认为问题是,对于空的ROVec,'.first'返回nil,这与'PersistentList'相同。我该如何修复这个问题?

1 个答案

0

我更改为让类现在继承自ISeq而不是ASeq,并实现了当集合为空时返回nullseq()方法。

此外,你试过了https://github.com/ztellman/collection-check吗? "这是对数据结构正确性和实现所有必要接口的验证。”
...