2012-07-12 18 views
17

有人可以幫助我理解Scala在集合API中的各種「喜歡」特徵。我一直在閱讀,並試圖比較每個沒有運氣。我想我可以看到Map例如擴展了MapLike - 增加了2個具體的方法。但是這引發了爲什麼要這樣做的問題?爲什麼不在Collection API中有1個Map特性而不是Map和MapLike?斯卡拉的MapLike,ListLike,SeqLike等,每個人如何比較地圖,列表,Seq?

謝謝!

+0

可能的[Scala 2.8集合設計教程]的副本(http://stackoverflow.com/questions/1722137/scala-2-8-collections-design-tutorial) – 2012-07-12 21:40:51

+0

實際上不是重複的...這個問題被包含由那一個。 – 2012-07-12 21:41:08

回答

14

對這些細節的最佳來源是Martin Odersky and Lex Spoon's "What's New in Scala 2.8: The Architecture of Scala Collections"

斯卡拉集合庫避免了重複代碼,並通過使用通用的建設者和遍歷 了在所謂的集合達到 「相同的結果類型」的原則稱爲實現特徵。這些性狀 以Like後綴命名;例如,IndexedSeqLikeIndexedSeq的 實現特徵,同樣, TraversableLikeTraversable的實現特徵。 收集類如TraversableIndexedSeq繼承了所有 這些特性的具體方法實現。 實現特徵有兩個類型參數,而不是一個用於 正常集合。他們參數不但超過了集合的 元素類型,也超過了集合的表示類型,底層集合的類型,如Seq[I]List[T] ...

整篇文章如果您想將自己的集合類與集合API集成,或者您只是想更深入地瞭解庫的工作方式,那麼它非常有用。

+1

我不得不說,從閱讀這個摘錄,我不是很聰明(我有同樣的問題作爲@LalolnDublin):(我看到有一些更普遍的特徵的實現,但我真的不能看到那裏 – 2012-07-12 09:01:31

+0

@Karel:嘗試文章!這是值得的努力,一個完整的解釋在這裏複製將會太長,當原始資源非常容易獲得並且已經非常清晰時,我沒有看到任何意義上的解釋。 – 2012-07-12 14:10:50

+0

謝謝,在閱讀了這篇文章之後,我仍然無法理解這個概念(對scala並不陌生),但其中一個關鍵項目似乎是「TraversableLike」(帶有2類參數)的概念,允許有人使用Traverable接口,而不受數據和表示形式的統一類型表示的限制,但我沒有更多的例子就完全理解這一點,但我覺得我更近了一步! – LaloInDublin 2012-07-12 19:09:14