kotlin的lambda表达式

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) }

猜你喜欢

转载自blog.csdn.net/villa_mou/article/details/78833268