Характеристика Traversable
имеет методы, такие как toList
, toMap
, ToSeq
. Учитывая, что List
, Map
, Seq
являются подклассами Traversable
, это создает круговую зависимость, которая составляет , как правило, не является желательным шаблоном проектирования.Циркулярная зависимость в коллекциях Scala
Я понимаю, что это ограничено библиотекой коллекций и предоставляет некоторые полезные методы преобразования.
Был ли другой альтернативный проект рассмотрен? Например, класс «полезность» или добавление методов преобразования в Predef
?
Скажем, я хочу добавить новый класс: class RandomList extends List {...}
. Было бы неплохо иметь способ toRandomList
, доступный для всех классов Traversable, но для этого мне нужно было бы «сутенер моей библиотеки» с неявным на Traversable? Это кажется немного излишним. С дизайном класса утилиты я мог бы просто расширить этот класс (или Predef), чтобы добавить мой метод преобразования. Какой был бы рекомендованный дизайн здесь?
Спасибо @retronym и Daniel. Тем не менее, я в основном ищу ответ на первую часть вопроса. Является ли циклическая зависимость молчаливо принятой в качестве шаблона проектирования в библиотеках Scala? – Adrian
Адриан: Да. Ответ Андрея правильный. –
Существует обоснованный случай, когда коллекции Scala являются автономным модулем и, следовательно, имеют «разрешенные» значения круговых зависимостей. Тем не менее, это - биг-модуль, и он активно развивается, поэтому более чистый дизайн будет хорошим. Это несколько похоже на подход функционального программирования извне, с императивным кодом внутри (в частных методах). Я предполагаю, что для избежания циклической зависимости требуется абстрагирование по типам (т. Е. Передача классов к методу, подобному (T), а не toList(), toMap() и т. Д.), Который Scala не поддерживает (пока?). – Adrian