首页 > 解决方案 > 不明白这个 Lambda 函数是如何工作的

问题描述

我是 Kotlin 的新手,几天前刚刚了解了 lambda 函数。

所以,我的理解是:

假设我有一个以 lambda 函数作为参数的函数:

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 myLambda: (Int, Int) -> Int = {x,y ->  x+y}

    x.addTowNumbers(2,5, myLambda)
}

但是今天看到了一种新方法,如下所示。

拉姆达函数:

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

将 lambda 函数用作参数的高级函数:

 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)

另外,为什么有等号?

总 lambda 参数在做什么?

标签: androidkotlin

解决方案


这是一个带有表达式主体的函数:

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!"

推荐阅读