评论者:amalloy
好吧,感谢反馈 - 我很高兴我知道最后的补丁可能是不正确的我就进了:)。我认为我需要实现LazySeq中使用的java集合接口,例如java.util.List,以避免中断像(link: n) (ArrayList. (range n))这样的互操作函数。如果仅实现ISeq(以及因此IPersistentCollection),那还是挺容易管理的。
但是,对于每个新的源代码,这仍然是一大块不愉快的前提;如果我不在core_deftype中放入宏defseq,你会欢迎吗?如果是这样,似乎不妨实现互操作接口;如果不是,我可以跳过它们,并为每个新的源类型实现ISeq、IPersistentCollection和Seqable的7(它不是像9吗?)个方法。
感谢你指出clojure.lang.Range - 我没想到我们那里有它。当然,通过实现继承,将Range,Iteration等从LazySeq继承下来并扩展协议是很简单的。但这意味着将功能从clojure移动到java,而我认为我们不希望这样做。
我将在今晚稍后为这两种新型态手动实现ISeq,并附上补丁。