有人可以帮我理解Scala在集合API中的各种“喜欢”特征。我一直在阅读并试图比较每一个没有运气。我想我可以看到Map,例如,扩展MapLike - 添加2个具体方法。但这引出了为什么要这样做的问题?为什么不在Collections API中使用1个Map特征而不是Map和MapLike?
谢谢!
答案 0 :(得分:15)
这些详细信息的最佳来源是Martin Odersky and Lex Spoon's "What's New in Scala 2.8: The Architecture of Scala Collections":
Scala集合库避免了代码重复并实现了 通过使用通用构造函数和遍历来实现“相同结果类型”原则 在所谓的实现特征中的集合。这些特质 以
Like
后缀命名;例如,IndexedSeqLike
就是IndexedSeq
的实施特征,同样地,TraversableLike
是Traversable
的实施特征。 诸如Traversable
或IndexedSeq
之类的集合类继承了所有 他们从这些特征中具体实现方法。 实现特征有两个类型参数,而不是一个 正常的集合。它们不仅可以在集合中进行参数化 元素类型,也是集合的表示类型, 即。,基础集合的类型,例如Seq[I]
或List[T]
......
如果您想将自己的集合类与Collections API集成,或者您只是想更深入地了解库的工作方式,那么整篇文章非常有用。