【问题标题】:Scala's MapLike, ListLike, SeqLike, etc how does each compare to Map, List, Seq?Scala 的 MapLike、ListLike、SeqLike 等与 Map、List、Seq 相比如何?
【发布时间】:2012-07-12 00:27:32
【问题描述】:

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

谢谢!

【问题讨论】:

标签: scala collections traits


【解决方案1】:

这些细节的最佳来源是Martin Odersky and Lex Spoon's "What's New in Scala 2.8: The Architecture of Scala Collections"

Scala 集合库避免了代码重复并实现了 使用通用构建器和遍历的“相同结果类型”原则 在所谓的实现特征中的集合。这些特质 以Like 后缀命名;例如,IndexedSeqLikeIndexedSeq 的实现特征,类似地, TraversableLikeTraversable 的实现特征。 TraversableIndexedSeq等集合类继承所有 他们从这些特征中实现的具体方法。 实现特征有两个类型参数,而不是一个 正常收藏。它们不仅在集合上参数化 元素类型,还超过集合的表示类型,底层集合的类型,如Seq[I]List[T]...

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

【讨论】:

  • 我不得不说,从阅读这段摘录来看,我并不聪明(我和@LalolnDublin 有同样的问题):( 我看到有一些更一般的特征的实现,但我实在看不出有什么用处。
  • @Karel:试试这篇文章!这是值得的。在这里复制完整的解释太长了,当原始来源如此容易获得并且已经非常清楚时,我没有看到任何解释的意义。
  • 谢谢,在阅读了几遍文章后,我仍然无法理解这个概念(刚接触 scala 并没有帮助),但一个关键项目似乎是“TraversableLike”的概念(带有 2 个类型参数)允许某人使用 Traverable 接口,而不受元素和数据表示的统一类型表示的限制。没有更多示例,我无法完全理解这一点,但我觉得我更近了一步!
猜你喜欢
  • 2015-06-01
  • 1970-01-01
  • 2011-10-20
  • 2012-06-07
  • 1970-01-01
  • 1970-01-01
  • 2021-04-04
  • 1970-01-01
  • 2018-06-29
相关资源
最近更新 更多