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]

我认为问题是 '.first' 在空 ROVec 上的返回nil与 'PersistentList' 类似。我该如何修复它?

1 个答案

0

我更改了类,现在让它继承自 ISeq 而不是 ASeq 并实现了方法 seq(),以便在集合为空时返回 null

您是否尝试过https://github.com/ztellman/collection-check? “这既是验证数据结构的正确性,也是验证它实现了所有必要的接口。”
...