Lambda是什么
简单来讲,Lambda是一种函数的表示方式(言外之意也就是说一个Lambda表达式等于一个函数)。更确切的说:Lambda是一个未声明的函数,会以表达式的形式传递
来历
Python:一个函数返回了一个内部函数,该内部函数引用了外部函数的相关参数和变量,我们把该返回的内部函数称为闭包
在kotlin里面我们通常说的闭包就是lambda表达式
首先看高阶函数
将函数作为参数或者返回函数的函数叫高阶函数
定义一个高阶函数
fun 高阶函数名(参数函数名:参数函数类型):高阶函数返回类型{
高阶函数体
...
}
例
fun cacl(a:Int,b:Int,action:(Int,Int)->Int):Int{
return action(a,b)
}
调用
1,普通调用
var sum = cacl(20, 30, { m, n ->
m + n
})
2,去括号调用
注:在 Kotlin 中有一个约定,如果函数的最后一个参数是一个函数,并且你传递一个 lambda 表达式作为相应的参数,你可以在圆括号之外指定它
var sum = cacl(20, 30) { m, n ->
m + n
}
lambda的形式
1,无参lambda
{
println("无参lambda")
}()
2,有参lambda
{a:Int,b:Int->
a+b
}(20,30)
3,有返回值的 Lambda返回值(返回最后一行)
val result1 = {
println("其他语句")
"字符串"
}()
4,通过变量保存lambda
val function ={a:Int,b:Int->a+b}
5,如果Lambda参数只有一个,可以使用it表示
var result = add(a){
it + 10
}
6,Lambda访问外部变量
var a = 10
{
println(a)
}()
注:在 Kotlin中还有另外一个约定,如果一个函数的参数只有一个,并且参数也是一个函数,那么可以省略圆括号
view.setOnClickListener() {v -> viewClicked(v) }
=>
view.setOnClickListener{v -> viewClicked(v) }