Kotlin lambda表达式

“Lambda 表达式语法”

Lambda 表达式的完整语法形式如下: val sum: (Int, Int) -> Int = { x: Int, y: Int -> x + y }

  • lambda 表达式总是括在花括号中。
  • 完整语法形式的参数声明放在花括号内,并有可选的类型标注。
  • 函数体跟在一个 -> 之后。
  • 如果推断出的该 lambda 的返回类型不是 Unit,那么该 lambda 主体中的最后一个(或可能是单个)表达式会视为返回值。

如果将所有可选标注都留下,看起来如下: val sum = { x: Int, y: Int -> x + y }

“传递末尾的 lambda 表达式”

按照 Kotlin 惯例,如果函数的最后一个参数是函数,那么作为相应参数传入的 lambda 表达式可以放在圆括号之外:

// 完整代码
items.fold(0, {
        acc, e -> acc * e
    })

val product = items.fold(1) { acc, e -> acc * e } 这种语法也称为拖尾 lambda 表达式。 如果该 lambda 表达式是调用时唯一的参数,那么圆括号可以完全省略:

// 完整代码
run({()->println("...")})

run { println("...") }

it:单个参数的隐式名称

// 完整代码
ints.filter { (it: Int) -> Boolean = it > 0 }

ints.filter { it > 0 }