С функциями высшего порядка в Kotlin, почему лямбды показываются вне других параметров функции? - PullRequest
0 голосов
/ 29 мая 2019

В какой-то тренировке, которую я рассматриваю, я не совсем понимаю, как пример функции высшего порядка и лямбда связаны через синтаксис

Эта функция Котлина высшего порядка

fun myWith(name: String, block: String.() -> Unit) {
  name.block()
}

вызывается вот так

myWith(fish.name) {
  capitalize()
}

Я понимаю, что вторая часть - лямбда, но я не понимаю, почему она не включена в качестве второго параметра в функцию и просто повисла вне параметров. Например, почему он не вызывается как:

myWith(fish.name, { capitalize() } )

Позже более подробное описание примера будет показано как

myWith(fish.name, object : Function1<String, Unit> {
  override fun invoke(name: String) {
    name.capitalize()
  }
})

Что включает в себя лямбду внутри нормального списка параметров до myWith

1 Ответ

2 голосов
/ 29 мая 2019

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

Источник: https://kotlinlang.org/docs/reference/lambdas.html#passing-a-lambda-to-the-last-parameter

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