Почему общей формы groupBy в Котлине недостаточно? - PullRequest
2 голосов
/ 14 июня 2019

Документация Kotlin для groupBy показывает специальную форму для каждого типа, например ByteArray, IntArray. Почему это так, почему единой универсальной формы недостаточно?

inline fun <T, K> Array<out T>.groupBy(
    keySelector: (T) -> K
): Map<K, List<T>>

Фрагмент из документации Kotlin

inline fun <T, K> Array<out T>.groupBy(
    keySelector: (T) -> K
): Map<K, List<T>>
inline fun <K> ByteArray.groupBy(
    keySelector: (Byte) -> K
): Map<K, List<Byte>>
inline fun <K> ShortArray.groupBy(
    keySelector: (Short) -> K
): Map<K, List<Short>>
inline fun <K> IntArray.groupBy(
    keySelector: (Int) -> K
): Map<K, List<Int>>

...

Вопрос 2

Кажется, IntArray не подкласс Array, и это, вероятно, причина, по которой это необходимо.

Итак, мне интересно - если бы я хотел добавить свою собственную функцию, скажем, verySpecialGroupBy - значит ли это, что мне также нужно было бы указать не одну такую ​​функцию - но повторить ее для каждого типа массива?

Или это очень специфический и редкий случай, когда вам нужно будет использовать эти специальные массивы, и на практике вы можете просто определить свою функцию для универсального Array и игнорировать остальные?

1 Ответ

1 голос
/ 14 июня 2019

Эти массивы предназначены для массивов примитивных типов. Так что в вашем примере создания функции verySpecialGroupBy вам нужно будет повторять ее только для каждой специализации, если вы хотите использовать ее с массивами примитивного типа.

Подробнее о необходимости использования массива примитивных типов вы можете прочитать в этой ветке обсуждения Kotlin .

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