Наследование библиотеки Scala - PullRequest
3 голосов
/ 24 февраля 2012

Я пытаюсь понять, как все черты типа Seq, Iterable, Traverable, TraversableLike все работают вместе.

Я постепенно получаю немного паукавеб-диаграмма, как я пытаюсь нарисовать отношения в диаграмме классов UML.

Есть ли причина, например, scala.collection.immutable.Seq наследуется от scala.collection.generic.GenericTraversableTemplate, хотя она наследует эту черту от своего родителя scala.collection.immutable.Iterable?

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

Cheers, Ant

1 Ответ

3 голосов
/ 24 февраля 2012

trait Seq [+A] extends Iterable[A] with Seq[A] with GenericTraversableTemplate[A, Seq ] with SeqLike[A, Seq[A]] with Parallelizable[A, ParSeq[A]]

trait Iterable [+A] extends Traversable[A] with Iterable[A] with GenericTraversableTemplate[A, Итерируемый ] with IterableLike[A, Iterable[A]] with Parallelizable[A, ParIterable[A]]

Как видите, Seq иTraversable фактически расширяет GenericTraversableTemplate различными параметрами типа, так что, например, метод flatten имеет соответствующий тип возвращаемого значения в каждом случае.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...