一开始我有点懵逼,lambda表达式是匿名函数我可以理解,可是一会是()->Unit,一会是{a:Int,b:Int->a+b}是什么鬼,后来才理解了。
lambda函数其实是匿名函数另一种写法,比如求a和b的和
//一般函数写法
var sumTwo = fun(a1: Int, a2: Int) = a1 + a2
--------------------------------------------------------------
//lambda函数写法
//a和b是参数,类型分别是Int类型
//->后面则是具体函数体
var lamdSum = { a: Int, b: Int -> a+ b }
//正式开始调用
lamdSum(2,3)
而由于kotlin的函数里面的参数是可以传入函数的,则()->Unit代表的是变量的类型,类似于Int,String等,比如我定义一个X,它的类型是函数
// = 前面试变量及变量的类型,后面是函数体
// (a1: Int) -> Unit 代表 X的类型是一个函数类型,返回值时Utit,传入的参数是Int类型
var X: (a1: Int) -> Unit = { a1: Int -> println(a1) }
上面可能不理解,这样,我定义一个函数,里面传的参数类型是函数
//这是一个求和函数,返回类型是Int类型
fun sumOne(a1: Int, a2: Int): Int {
return a1 + a2
}
//这是一个求和函数,返回类型是String类型
fun sumTwo(a1: Int, a2: Int): String {
a1 + a2
return "计算完毕"
}
//这是一个打印的函数,传入的参数类型为函数,这个函数内传的参数为Int型,返回值为Int
fun lamdDemo(myAction: (x: Int) -> Int) {
println(myAction)
}
//正式调用
fun main(array: Array<String>) {
//调用lamdDemo,但是里面的参数只能传sumOne(),因为sumOne返回值是Int型,lamdDemo需要传入的函数也是Int型
lamdDemo { sumOne(2, 3) }
}