(acc: S, T) -> S
является типом.
В Kotlin, функции являются первоклассными типами . У некоторых типов есть простое имя, например String
или Int
. Другим нужны параметры, такие как List<URL>
или Map<Int, String>
. Типы функций имеют еще более сложные имена в виде:
(
params ) ->
returnType
Итак, функция, которая принимает Одиночный параметр Int
и возвращает String
будет иметь тип (Int) -> String
.
Вы также можете дать имена параметров, если хотите, например, (count: Int) -> String
, хотя имя игнорируется.
Итак, в вашем примере метод reduce()
принимает один параметр, который называется operation
. Этот параметр является функцией, которая сама принимает два параметра (первый с именем acc
типа S
и второй с типом T
без имени) и возвращает значение типа S
.
В вашем случае особенно запутанно то, что S
и T
являются параметрами типа: они относятся к типам, которые еще не известны. Когда вызывается метод reduce()
, вызывающая сторона указывает их (или компилятор выводит их). Вот что означает <S, T : S>
после fun
: для метода нужны два параметра типа: S
и T
(который должен быть S
или подтип).