В случае Set
или List
выбор кажется более простым, но что мне делать для Java Collection
, Iterable
эквивалентно? Я иду за Seq
? Traversable
? GenTraversableOnce
?Как выбрать тип коллекции для возврата в Scala?
ответ
Как часто, это будет зависеть от потребностей вашего абонента. Traversable довольно высокий уровень (вы получаете только foreach
), но этого может быть достаточно. Seq будет использоваться, если вам нужен определенный порядок элементов. GenTraversableOnce будет немного абстрактным для меня и, возможно, для ваших коллег-кодеров.
Вам необходимо решить, исходя из ваших потребностей. Например: Согласно Scala Documentation определению последа является
последовательностей являются частными случаями Iterable коллекций класса Iterable. В отличие от итераций, последовательности всегда имеют определенный порядок элементов. Последовательности предоставляют метод для индексации.
Так что если вы хотите воспользоваться упорядоченностью или вы хотите, чтобы получить элемент по индексу вы можете использовать Seq
Опять же согласно Scala Documentation, если вы в основном заинтересованы в итерации над коллекцией Traversable достаточно
Просто обратите внимание на то, что для вашей функции-подписи, такой как функция возвращаемого типа, существует общая хорошая практика, используйте более общий (абстрактный) тип данных, чтобы предотвратить ненужное снижение производительности для вызывающих функцию функций.
Не должны ли входные параметры быть как можно более абстрактными, а возвращаемое значение как можно более конкретным? – mucaho
О параметрах Я согласен с вами. О типе возврата это действительно зависит. Например, представим функцию, принимающую два Traversable, и хочет их конкатенировать. Каким должен быть тип возврата? Я считаю Traversable. Таким образом, уровень абстракции возвращаемого типа в основном происходит из уровня абстракции параметра. В общем, вы можете быть конкретным в возвращаемом типе, только если у вас есть веская причина. Вы не должны вызывать ненужный штраф производительности вызывающему функции. Например, вам может быть удобнее использовать Seq, поэтому всегда возвращайте Seq в функции, управляющей коллекциями. Это не верно. – Nami
«Вы не должны принуждать к ненужному штрафу за исполнение функции вызывающей функции». «Почему должно быть наказание за производительность, если вы указываете тип возврата более конкретным? Реализация не изменяет, является ли тип возврата 'Seq' или' GenTraversableOnce'. «Всегда возвращайте Seq в функции, управляющей коллекциями, неправильно» «Я вижу вашу точку здесь. – mucaho
- 1. Тип коллекции Scala для фильтра
- 2. scala-arm. Тип возврата
- 3. Тип возврата Scala for/yield
- 4. Функция Scala: какой тип возврата
- 5. как выбрать тип коллекции навигационная ценность свойства
- 6. использовать динамический тип возврата в scala fuction
- 7. Тип коллекции генерируется для с выходом
- 8. Тип возврата «|» в компиляторах анализатора Scala
- 9. Каков наилучший тип коллекции для возврата в API
- 10. Тип возврата функции Scala на основе общих
- 11. Когда тип возврата требуется для методов в Scala?
- 12. Как выбрать случайное значение из коллекции в Scala
- 13. Scala function/method параметризованный тип возврата
- 14. Коллекции секвенирования в Scala
- 15. Scala Перегруженный метод Потребности Тип возврата
- 16. Каков тип возврата класса case scala?
- 17. Временные коллекции для Scala?
- 18. Не знаете, как работать Где в коллекции для возврата коллекции
- 19. Почему тип возврата необходим для перегруженной функции scala?
- 20. Скала: тип параметра для коллекции
- 21. Почему Scala требует тип возврата для рекурсивных функций?
- 22. Коллекции Scala
- 23. Тип возврата для этого метода scala: String vs Any
- 24. UML: Тип возврата в виде коллекции в диаграмме классов
- 25. Тип возврата для DownloadStringCompletedEventHandler?
- 26. Как функция возврата Scala
- 27. Тип коллекции для GenericEntity
- 28. Как выбрать из коллекции?
- 29. Тип возврата для CellForRowAtIndexPath
- 30. Тип возврата для вектора
Какая у вас просьба? – SMA
Это не заслуживает полного ответа, но стоит отметить, что вы можете вернуть экземпляр типа Iterable scala, как и в Java. –