Scala MapLike, ListLike, SeqLike и т. Д. Как каждый из них сравнивается с Map, List, Seq?

Может ли кто-нибудь помочь мне разобраться в различных "лайках" Scala? черты в коллекции API. Я перечитывал и пытался сравнить каждый без удачи. Я думаю, что я вижу, что Map, например, расширяет MapLike - добавляя 2 конкретных метода. Но возникает вопрос: зачем вообще это делать? Почему бы просто не иметь 1 признак карты в API коллекций вместо Map и MapLike?

Спасибо!

 Daniel C. Sobral12 июл. 2012 г., 23:41
На самом деле не дубликат ... этот вопрос относится к этому.
 Daniel C. Sobral12 июл. 2012 г., 23:40
возможный дубликатScala 2.8 collections design tutorial

Ответы на вопрос(1)

Решение Вопроса

Лучший источник для этих деталейМартин Одерски и Лекс Спун "Что нового в Scala 2.8: Архитектура коллекций Scala":

The Scala collection library avoids code duplication and achieves the "same-result-type" principle by using generic builders and traversals over collections in so-called implementation traits. These traits are named with a Like suffix; for instance, IndexedSeqLike is the implementation trait for IndexedSeq, and similarly, TraversableLike is the implementation trait for Traversable. Collection classes such as Traversable or IndexedSeq inherit all their concrete method implementations from these traits. Implementation traits have two type parameters instead of one for normal collections. They parameterize not only over the collection's element type, but also over the collection's representation type, i.e., the type of the underlying collection, such as Seq[I] or List[T]...

Вся статья чрезвычайно полезна, если вы хотите интегрировать свои собственные классы коллекций с API коллекций или если вы просто хотите глубже понять, как работает библиотека.

 12 июл. 2012 г., 11:01
Я должен сказать, что просто прочитав этот отрывок, я не намного мудрее (у меня тот же вопрос, что и у @LalolnDublin) :( Я вижу, что есть реализация некоторых более общих черт, но я действительно не могу понять, где это будет быть полезным.
 12 июл. 2012 г., 16:10
@ Карел: Попробуйте статью! Это стоит усилий. Полное объяснение было бы слишком длинным, чтобы его здесь скопировать, и я не видел никакого смысла в перефразировании, когда исходный источник так легко доступен и уже очень ясен.
 LaloInDublin12 июл. 2012 г., 21:09
Спасибо, после прочтения статьи пару раз мне все еще не удается понять концепцию (новость в scala не помогает), но, похоже, одним из ключевых моментов является концепция, которая & quot; TraversableLike & quot; (с 2 типами параметров) позволяет кому-либо использовать интерфейс Traverable, не ограничиваясь единообразным представлением типа как элемента, так и представления данных. Я не до конца понимаю это без дополнительных примеров, но мне кажется, что я на шаг ближе!

Ваш ответ на вопрос