Kotlin Lambda Синтаксис Объяснение - PullRequest
0 голосов
/ 23 ноября 2018

Я новичок в Kotlin и хочу узнать о поведении лямбда-выражения для println. К сожалению, обе функции выполняют одинаковую работу.

    val printFunction1:(String) -> Unit = {
        println("Hello, $it!")
    }

    val printFunction2 = {
        user: String ->
        println("Hello, $user!")
    }

Я могу вызывать такие функции, было бы хорошо, если бы кто-то мог это объяснить.

 printFunction1("Bini")
 printFunction2("Jenu")

Ответы [ 2 ]

0 голосов
/ 23 ноября 2018

Как вы могли бы ожидать, что функции будут вести себя?

Первая имеет явный тип функции (String) -> Unit.Таким образом, вам не нужно указывать тип аргумента String внутри лямбды.Вы можете просто использовать it ( неявное имя для одиночных аргументов лямбда-выражений) в качестве String.

Во втором не указывается тип, и вам нужно сообщить компилятору, чтовведите ваш лямбда-параметр, который вы сделали с user: String ->.Обратите внимание, что более идиоматично перемещать эту часть в строку с открывающей скобкой:

val printFunction2 = { user: String ->
    println("Hello, $user!")
}

В противном случае я не вижу здесь ничего необычного.Дайте мне знать, если вам нужны дальнейшие разъяснения.

0 голосов
/ 23 ноября 2018

Лямбды ведут себя точно так же, как нормальные функции в обоих случаях.принять входные данные (параметр) в виде строки, и функция выполняет println (). Нормальная функция:

fun funName(parameters):ReturnType{FunBody}

Лямбда-функция связана с переменной:

var varFunName:(ParameterType) ->Unit={FunBody}
               or
var varFunName = {
    parameters -> {FunBody}
}

Примечание: поскольку в параметре нет имени параметрапервый тип, который он автоматически отображает на переменную / выражение для большего понимания, посмотрите на грамматику для functionLiterals на странице есть грамматика для всех конструкций языка Kotlin, возможно, потребуется некоторое время, чтобы понять, что все грамматики являются ссылкамитак что если вы хотите понять эту часть, просто перейдите по ссылке

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