lambda表达式语法

lambda表达式的全语法形式,比如,函数类型文本,按照如下方式:

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

lambda表达式总是被大括号包围,参数的定义在括号中,并且可以有额外的类型注解,主体部分紧跟->符号。如果推断的lambda表达式的返回值不是Unit,那么lambda表达式主体的最后一个表达式会被作为返回值。

如果我们省去了额外的注解,那么剩下的样子就看起来像如下形式:

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

lambda表达式只有一个参数是很常见的。如果Kotlin可以理解签名,那么其允许我们不声明这个仅有的参数,并且会隐式的定义一个参数名字为it:

ints.filter { it > 0 }

我们可以显示的从lambda表达式返回一个值,需要使用到return语法。另外,最后一个表达式的值会隐式的返回。因此下面的两段代码是等价的。

ints.filter {
    val shouldFilter = it > 0
    shouldFilter
}
ints.filter {
    val shouldFilter = it > 0
    return@filter shouldFilter
}

需要注意的是,如果一个函数使用另一个函数作为最后一个参数,lambda表达式参数可以在括号外部进行传递,可以查看callSuffix

results matching ""

    No results matching ""