评论者: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。