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

欢迎!请查看关于页面以了解更多关于此功能的信息。

+1
Clojure
编辑

我正在尝试创建一个与 clojure 环境良好合作的集合。这是我提出的方案

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

我已经尝试让它表现得像 'PersistentList'。但其中存在一个问题。有时候使用这种类型的空集合时,在 clojure 环境中将其解析为 '(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,并为空集合实现了 seq() 方法以返回 null

另外,你尝试过 https://github.com/ztellman/collection-check 吗?“这既是一种验证数据结构是否正确,又是一种验证是否实现了所有必需接口的方法。”
...