Kotlin fun () против лямбды есть ли разница? - PullRequest
2 голосов
/ 19 сентября 2019

Этот вопрос касается fun () против определений и областей действия лямбда-блока.
Я попытался определить выражения двумя способами.Вот что я попробовал:

  val myFunction = fun(){
    println("i am in a function")
    }

//but i also tried doing this:

    val myFunction = {
    println("i am in a lambda")
    }

Моя проблема в том, что я не знаю, эквивалентны ли они и это то же самое?

Ответы [ 2 ]

4 голосов
/ 19 сентября 2019

Различия лучше всего описаны в https://kotlinlang.org/docs/reference/lambdas.html#anonymous-functions:

  1. Анонимные функции позволяют указывать тип возвращаемого значения, лямбды - нет.

  2. Если вы этого не сделаете, вывод возвращаемого типа работает как для обычных функций, а не как для лямбд.

  3. Как сказал @dyukha, значение return отличается:

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

  4. Неявного не существуетit параметр, или разрушение.

Ваши конкретные случаи будут эквивалентны, да.

1 голос
/ 19 сентября 2019

См. Ссылку: https://kotlinlang.org/docs/reference/lambdas.html

Существует несколько способов получить экземпляр типа функции:

Использование блока кода внутри литерала функции в одном изформы:

  • лямбда-выражение: {a, b -> a + b},
  • анонимная функция: fun (s: String): Int {return s.toIntOrNull()?: 0}

Оба дают вам функциональный объект, который можно использовать взаимозаменяемо

...