有人可以帮我理解 Scala 在集合 API 中的各种“Like”特征。我一直在阅读并试图在没有运气的情况下比较每一个。例如,我想我可以看到 Map 扩展了 MapLike - 添加了 2 个具体方法。但这引出了一个问题,为什么要这样做?为什么不在 Collections API 中只使用 1 个 Map 特征而不是 Map 和 MapLike?
谢谢!
有人可以帮我理解 Scala 在集合 API 中的各种“Like”特征。我一直在阅读并试图在没有运气的情况下比较每一个。例如,我想我可以看到 Map 扩展了 MapLike - 添加了 2 个具体方法。但这引出了一个问题,为什么要这样做?为什么不在 Collections API 中只使用 1 个 Map 特征而不是 Map 和 MapLike?
谢谢!
这些细节的最佳来源是Martin Odersky 和 Lex Spoon 的“Scala 2.8 的新特性:Scala 集合的架构”:
Scala 集合库避免了代码重复,并通过在所谓的实现特征中使用泛型构建器和对集合的遍历来实现“相同结果类型”的原则。这些特征以
Like
后缀命名;例如,IndexedSeqLike
是 的实现特征IndexedSeq
,同样,TraversableLike
是 的实现特征Traversable
。集合类,例如Traversable
或IndexedSeq
从这些特征继承其所有具体方法实现。实现特征有两个类型参数,而不是普通集合的一个。它们不仅对集合的元素类型进行参数化,而且对集合的表示类型进行参数化, 即, 底层集合的类型,例如Seq[I]
orList[T]
...
如果您想将自己的集合类与 Collections API 集成,或者如果您只想更深入地了解库的工作原理,整篇文章将非常有用。