21

有人可以帮我理解 Scala 在集合 API 中的各种“Like”特征。我一直在阅读并试图在没有运气的情况下比较每一个。例如,我想我可以看到 Map 扩展了 MapLike - 添加了 2 个具体方法。但这引出了一个问题,为什么要这样做?为什么不在 Collections API 中只使用 1 个 Map 特征而不是 Map 和 MapLike?

谢谢!

4

1 回答 1

17

这些细节的最佳来源是Martin Odersky 和 ​​Lex Spoon 的“Scala 2.8 的新特性:Scala 集合的架构”

Scala 集合库避免了代码重复,并通过在所谓的实现特征中使用泛型构建器和对集合的遍历来实现“相同结果类型”的原则。这些特征以Like后缀命名;例如,IndexedSeqLike是 的实现特征IndexedSeq,同样, TraversableLike是 的实现特征Traversable。集合类,例如TraversableIndexedSeq从这些特征继承其所有具体方法实现。实现特征有两个类型参数,而不是普通集合的一个。它们不仅对集合的元素类型进行参数化,而且对集合的表示类型进行参数化, , 底层集合的类型,例如Seq[I]or List[T]...

如果您想将自己的集合类与 Collections API 集成,或者如果您只想更深入地了解库的工作原理,整篇文章将非常有用。

于 2012-07-12T02:46:31.880 回答