评论者:alexmiller
让我只是简单提一下,这是我第一次记得查看这个票据,因为它几乎在我参与Clojure核心之前。我知道这已经过去很长时间了,我正在试图真正地重新审视这个问题。但我可能会问你一些愚蠢的问题,因为我正在重新走过你走过的那条路。
我完全同意让良好的收集特性既能在Clojure核心内的实现中,也能在外部实现中发挥作用。
至于修改协议的可行性,我认为你可能误解了我的意图。我们当然可以修改/扩展协议,但我们只需要以一种增长(保留现有内容)而不是打破(通过更改现有的方法签名)的方式进行。我反对的是更改Sorted.seqFrom()的签名,这会破坏所有现有的实现——这根本不可行。但是,将Sorted扩展到Sorted2(或任何更有意义的名称)并在其中添加seqFrom的新arity是完全没问题的。子序列代码可以在集合是Sorted2的情况下做最好的事情,如果只是Sorted,就回退到其他方式。有各种方法来实现这一点,但希望你能理解这个意图——现有的东西继续按原样工作,如果有新的东西,就会利用它。
回溯一下,似乎seqFrom及其相关内容还没有足够强大,覆盖了可能存在于不同数据结构中的所有内容。我仍然认为NavigableSet有很多好的先验思考(不是说我有一个直接的答案,但它真的是同一个问题区域),并且广泛地查看在过去几年中添加的其他数据结构,看看我们能够实现什么是有益的。
实际上,子序列的整个实现在一定程度上比较低级,依赖于很多移动部件和假设。也许整个子序列操作实际上应该直接由集合来完成。