Scala Collection Каркасный дизайн - PullRequest
3 голосов
/ 21 июня 2019

Я смотрю на реализацию Scala Collections в версии 2.12 и у меня возник вопрос по поводу дизайна. Здесь используются некоторые «типы абстракций»:

$Coll$Like
Gen$Coll$Like
Gen$Coll$

Насколько я понимаю, признаки Gen$Coll$Like существуют исключительно с целью повторного использования объявлений (не определений), то есть все методы в признаках Gen$Coll$Like являются абстрактными.

$Coll$Like в свою очередь объявляет несколько абстрактных методов и реализует остальные методы Gen$Coll$Like через них. Кроме того, $Coll$Like -признаки имеют дополнительный параметр типа +Repr, который, я полагаю, предназначен для случаев, подобных SeqLike[Char, String], поэтому мы можем рассматривать String как Seq[Char].

Наиболее сомнительными чертами являются Gen$Coll$. Я не очень понимаю их смысл. В иерархии Seq все Gen$Coll$ черты пусты до GenTraversableOnce (также я ожидал, что GenTraversableOnce будет назван GenTraversableOnceLike, поскольку он обеспечивает только объявления абстрактных методов):

GenSeq <--- GenIterable <--- GenTraversable <--- GenTraversableOnce

Можете ли вы объяснить цель Gen$Coll$ черт? Пример где Gen$Coll$ на самом деле полезно (для любых целей) будет очень признателен.

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