评论者为:amalloy
好的,感谢您的反馈——我很高兴我在之前的补丁中进行时知道这可能是错误的:)。我认为我需要实现LazySeq实现的Java集合接口,例如java.util.List,以避免破坏像(defn range-list (链接:n) (ArrayList. (range n)))这样的互操作函数。如果只需要实现ISeq(从而实现IPersistentCollection),那么这相对容易管理。
尽管如此,对于每个新来源来说,它仍然是一个不愉快的样板代码块;如果我不将其放入core_deftype中,您会接受一个像defseq这样的宏吗?如果是这样,似乎最好实现互操作接口;如果不是,我可以跳过它们,并为每种新的源类型实现ISeq、IPersistentCollection和Seqable中的7个(难道不是9个?)方法。
感谢您指出clojure.lang.Range给我——我没有意识到我们那里有这个。当然,通过实现继承,它很容易让Range、Iteration等继承自LazySeq,并从它们扩展协议。但这意味着将功能从clojure移到java,我觉得我们不太想这么做。
我将为这两种新的类型手动实现ISeq,并将在今天稍后附带补丁。