lambda表达式
var method01: (Int, Int) -> Unit
// method01() //无方法体,报错
var method02: (Int, Int) -> Int
// method02() //无方法体,报错
var method03: (Int, Int) -> Int = { a, b -> a + b }
println("method03 =${method03(1, 2)}")
/**
* 同上面写法,:加() 等同 =加{}
* :(形参类型)
* ={具体详情}
*/
var method04 = { a: Int, b: Int -> a + b }
println("method04 =${method04(3, 4)}")
/**
* 返回值自动识别为double
*/
var method05 = { a: Int, b: Int -> a.toDouble() + b.toDouble() }
println("method05 =${method05(5, 6)}")
var method06: (String, String) -> Unit = { a, b -> println("a=$a,b=$b") }
method06("张三", "李四")
var method07: (String) -> String = { a -> a }
println("method07 ${method07("王五")}")
/**
* 一个参数,可以不写参数名,默认值是it
*/
var method08: (String) -> String = { it }
println("method08 ${method08("刘六")}")
var method09: (Int) -> Unit = {
when (it) {
1 -> println("你是1啊")
in 2..10 -> println("你是2-10啊啊")
else -> println("你是其他数字")
}
}
method09(10)
var method10: (Int, Int, Int) -> Unit = { a, b, c ->
println("method10=${a + b + c}")
}
method10(1, 2, 3)
var method11 = { a: Char -> if (a == 'M') println("你是男") else println("你是女") }
method11('M')
var method12 = { a: Char -> if (a == 'M') "你是男" else "你是女" }
println("method12=${method12('a')}")
/**
* 覆盖操作
*/
var method13 = { a: Int -> println("传入的值是$a") }
method13 = { println("哈哈哈,我覆盖了。。。$it") }
method13(12)//调用的是下面的方法
实例:最简单的高阶函数:
/**
* 无参数无返回值
* loginMethod: () -> Unit
* loginMethod是函数名,
* ()代表无参
* ->代表方法体
* Unit代表无返回值
*/
fun show(isLogin: Boolean, loginMethod: () -> Unit) {
if (isLogin) {
println("aaaaaaa 成功-----执行顺序1")
} else {
println("aaaaaaa 失败。。。。。")
}
}
/**
* 有参有返回值
*/
fun show1(isLogin: Boolean, loginMethod: (Boolean) -> String) {
if (isLogin) {
println("bbbbbbb 成功-----执行顺序1")
val loginMethod1 = loginMethod(true)
println("bbbbbbb 成功 loginMethod1=$loginMethod1 执行顺序3")
} else {
println("bbbbbbb 失败。。。。。")
val loginMethod1 = loginMethod(false)
println("bbbbbbb 失败 loginMethod1=$loginMethod1")
}
}
调用:
show(true) {
println("aaaaaaa 这是啥啊?执行顺序2")
}
show1(true) {
println("bbbbbb 这是啥啊?$it 执行顺序2")
"我是bbb的返回值"
}
网友评论