Kotlin: как функция 'fold' может принимать один аргумент? - PullRequest
0 голосов
/ 02 марта 2020

Согласно документации Kotlin, функция «сгиб» принимает два аргумента: начальное значение и операция. Однако я вижу, что следующий код компилируется и работает хорошо:

listOf<Int>(1, 2, 3).fold(0) { x, y -> x + y }

В скобках есть только один аргумент вместо двух. Если так, как возможно, что компиляция кода будет успешной? это должно быть ошибкой.

1 Ответ

3 голосов
/ 02 марта 2020

Согласно документам:

В Kotlin существует соглашение: если последний параметр функции является функцией, то лямбда-выражение передается как соответствующий Аргумент может быть помещен вне скобок.

и

Если лямбда является единственным аргументом для этого вызова, скобки могут быть опущены полностью.

Эта функция, называемая trailing lambda, делает код трудным для понимания начинающими Kotlin разработчиками, но когда вы его получаете, она позволяет писать DSL-подобный код, например:

val person = person {
    name = "John"
    age = 25
    address {
        street = "Main Street"
        number = 42
        city = "London"
    }
}

И вот почему это такая мощная языковая функция.

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