1.Lambda表达式就是匿名函数,Lambda表达式返回值是最后一行内容的返回值。
fun main(args: Array<String>) { sum(1, 2) //括号是运算符,等价于invoke sum.invoke(1, 2) } val sum = {param0: Int, param1: Int -> param0 + param1}
2.Lambda表达式也具有类型,类型表现形式与参数、返回值类型有关,类型是定义过的23种Function接口类型,具体可通过打印函数来查看。
3.当Lambda表达式作为函数的参数时几种语法示例:
fun main(args: Array<String>) { //forEach是一个扩展函数,参数是一个Lambda表达式 args.forEach({ arg -> println(arg) }) //Lambda表达式只有一个参数时可以直接使用it表示 args.forEach({ println(it) }) //函数的最后一个参数是Lambda表达式,可以把Lambda表达式移到函数的括号外面 args.forEach() { println(it) } //把Lambda表达式移到函数的括号外面以后如果没有别的参数,括号也可省略 args.forEach { println(it) } //如果函数实参Lambda表达式恰好能与形参Lambda表达式类型匹配 //比如forEach的形参Lambda是(T) -> Unit,本示例实参传入的Lambda是(Any?) -> Unit //小括号内可以直接传入函数名,匿名函数传函数引用,具名函数名字前加:: args.forEach(::println) args.forEach(showStr) }val showStr = { str: String -> println(str) }