Не понимаю, как работает эта функция Lamda - PullRequest
1 голос
/ 23 октября 2019

Я новичок в kotlin, только что узнал о функциях lamda пару дней назад.

Итак, я понимаю:

Допустим, у меня есть функция, которая принимает функцию lamda в качестве параметра:

class XX
{
    fun addTowNumbers(a:Int , b:Int , action: (Int,Int) -> Int)
    {
        val result = action(a,b)
            println(result)
    }
}

и назовите его так:

fun main(args: Array<String>)
{
    val x = XX();
    val myLamda: (Int, Int) -> Int = {x,y ->  x+y}

    x.addTowNumbers(2,5, myLamda)
}

Но сегодня мы увидели новый путь, который ниже.

Функция лямда:

 val sum: (Int, Int) -> Int = { x, y -> x + y }

Функция высокого уровня, где в качестве параметра используется функция lamda:

 fun applyOp(x: Int, y: Int, op: (Int, Int) -> Int): Int = op(x, y)

И она называется так:

 applyOp(2, 3, sum)

Итак, теперь моя путаница связана с функцией высокого уровня. Как в параметре

есть 2 двоеточия: op: (Int, Int) -> Int): Int = op (x, y)

также, почемуесть знак равенства?

Что делает общий параметр lamda?

1 Ответ

1 голос
/ 23 октября 2019

Это функция с телом выражения :

fun applyOp(x: Int, y: Int, op: (Int, Int) -> Int): Int = op(x, y)

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

fun applyOp(x: Int, y: Int, op: (Int, Int) -> Int): Int {
    return op(x, y)
}

Эти два эквивалентны;тело выражения - только более краткий способ написать его.

Аналогично, эти две функции идентичны:

fun helloWorld(): String {
    return "Hello World!"
}

fun helloWorld(): String = "Hello World!"

Вы даже можете оставить спецификацию типа функции выключенной, если вы используете выражениетело:

fun helloWorld() = "Hello World!"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...