评论者:alexmiller
只想提一下,这是我第一次记得查看这个工单,因为它基本上在我参与Clojure核心之前。我知道这已经很多年了,我正在试图真正地思考这个问题。但在我重新走你走过的每一步时,我可能会问一些愚蠢的问题。
我一定同意,使好的收集特性能够被Clojure核心内外部impl使用。
至于修改协议的可行性,我想你可能误解了我的意图。我们当然可以修改/扩展协议,我们只需要以一种成长的方式(保留现有内容)而不是破坏的方式(通过改变现有方法签名)来做。我反对的是修改Sorted.seqFrom()的签名,这会破坏所有现有的实现——这根本无法实现。但是将Sorted扩展到Sorted2(或任何更有意义的名称)并添加一个新的seqFrom级别是完全可行的。子序列代码可以在集合是Sorted2的情况下做最好,如果没有,则回退到其他操作。有各种方法可以实现这一点,但希望你能理解其意图——现有内容继续工作而不做任何改变,在新内容可用的情况下加以利用。
备份数据时,感觉似乎 seqFrom 及相关功能不足以涵盖在不同数据结构间可能希望实现的所有需求。我仍然认为 NavigableSet 在之前有很多好的思考(不是直接说这是一个直接的答案,但确实是同一个问题领域),并且进一步广泛地查看那些在此期间添加的其他数据结构,看看我们能实现什么将会是有益的。
实际上,子序列的实现相当粗糙,依赖于许多动作部件和假设。也许整个子序列操作实际上应该直接由集合来执行。