amalloy 的评论:
好了,感谢您的反馈 - 我很高兴我知道上一个补丁可能是错误的,所以进行了修改 :)。我本以为需要实现与LazySeq相同的Java集合接口,如java.util.List,以避免破坏像(range n) (ArrayList.)这样的互操作性函数。如果仅实现ISeq(从而实现IPersistentCollection)就足够了,那么这还是可以管理的。
尽管如此,对于每个新的源文件,编写样板代码仍然麻烦;如果不将宏defseq放入core_deftype中,您是否会接受它?如果是这样,似乎最好实现互操作性接口;如果不是,我可以跳过它们,并为每个新源类型实现ISeq、IPersistentCollection和Seqable的7(是不是像9个?)个方法。
感谢您向我指出clojure.lang.Range - 我没想到我们那里有这个。当然,在实现继承下,容易让Range、Iteration等继承自LazySeq并从它们扩展协议。但这意味着将功能从clojure移动到java,这我认为我们不想做。
我将在今天晚些时候为这两种新类型合在一起编写一个仅实现ISeq的手动补丁,并将其附加。