Lambda表达式
{x: Int, y: Int -> x + y}
->左边是参数和参数类型,右边返回值
函数类型定义
- (String,Int)->Unit为一个函数类型,即参数、-> 、返回值组成
高阶函数定义-Heigher-Order-Functions
- 高阶函数定义:参数类型是函数类型,或者返回值是函数类型的函数称为高阶函数,除此之外函数类型还能赋值给变量
fun gaojie(name1: Int, name2: Int, operation: (Int, Int) -> Int): Int {
return operation(name1, name2)
}
高阶函数的调用
- 本质:kotlin「函数其实并不能传递,传递的是对象」,因为只有对象才可以作为参数、返回值、赋值变量。又因为匿名函数、lambda表达式其实就是一个函数类型的对象,所以可以如下调用。
fun gaojie(name1: Int, name2: Int, operation: (Int, Int) -> Int): Int {
return operation(name1, name2)
}
fun add(name1: Int, name2: Int): Int {
return name1 + name2
}
fun minus(name1: Int, name2: Int): Int {
return name1 - name2
}
- 调用方法1:双冒号加函数名(Function Reference)
val name = gaojie(name1, name2, ::add)
gaojie(name1, name2, fun(name1: Int, name2: Int): Int {
return name1 + name2
})
gaojie(name1,name2){ a,b ->
a+b
}
kotlin中Lambda的应用
fun setOClickListener(onClick: (View) -> Unit){
this.onClick = onClick;
}
view. setOClickListener(fun (v: View): Unit{
//dosomeing
});
匿名函数写成Lambda表达式
view. setOClickListener({ v: View ->{
//dosomeing
}
})
如果Lambda是函数最后的一个参数的话,可以把Lambda写在括号的外面
view. setOClickListener(){ v: View ->{
//dosomeing
}
}
如果Lambda是函数的唯一的参数,又可以把括号去了
view. setOClickListener{ v: View ->{
//dosomeing
}
}
如果Lambda的参数是单参数,参数类型和参数名也可以省略
view. setOClickListener{
//dosomeing
}