java8的lambda是纯粹的便捷写法,单函数接口的写法简化
kotlin的lambda表示的是函数类型的对象,java的单函数接口压根没有必要存在了。。

思路

目的是:把函数当参数传给另一个函数,或者直接赋值给变量,【java拿interface包一层,传递实现接口的对象】
kotlin中可以直接来,是因为本质在操作函数的对象

  1. 函数作为函数参数
  2. fun a(param: (Int,Int) -> String) {
  3. param(1,2)
  4. }
  5. 表示函数a有一个参数,参数是个函数,这个函数有intint两个参数,返回值是String
  6. 函数a本身没有返回值
  7. 函数作为函数返回值
  8. fun b(param:Int):(Int,Int)->String {
  9. }
  10. 函数b 接收一个int参数,b的返回值是个函数

高阶函数:参数或则返回值是函数的 函数

同时我们可以把函数赋值给一个变量

函数引用::a

一个函数名加上::双冒号就代表 函数的对象,一个函数类型的对象

   fun a(param: (Int,Int) -> String) {
        param(1,2)
    }

    var aa = ::a

创建函数对象的三种方式

1.双冒号+函数名
2.匿名函数,kotlin里匿名函数不是函数,是函数类型的对象
3.lambda

lambda自身的缩写

当参数时的缩写

fun simple(num1: Int, num2: Int): Int {
    return num1 + num2
}


// add的第三个参数是  两个入参无返回值的lambda表达式
// 函数内容是执行这个表达式 
fun add(num1: Int, num2:Int, param3:(a:Int,b:Int) -> Unit) {
    // param3 只能用前面有定义的参数,不然编译失败
    val b=11
    param3(num1, b)
}

fun main(args: Array<String>) {

    var ret = add(1,2, {a,b -> println(a+b)} )

}

https://www.cnblogs.com/webor2006/p/11333101.html

1.https://www.cnblogs.com/webor2006/p/11498842.html
2.https://www.cnblogs.com/webor2006/p/11519284.html
3;https://www.cnblogs.com/webor2006/p/7705130.html
4.https://www.cnblogs.com/webor2006/p/7774876.html