//Kotlin中Lambda的十三种形式
fun main(args: Array<String>) {
//函数的声明
var method1: () -> Unit
var method2: (Int, Int) -> Int
var method3: (String, Boolean) -> Any?
var method4: (Int, Double, Long, String?) -> Boolean
// method4(1, 34.4, 345, null)
//函数的实现
//函数的 声明 + 函数的 实现
// :(参数) -> 返回 方式一()
// = {参数 -> 返回} 方式二{}
//方式一
//这是一个函数,只不过此函数,没有输入参数和输出参数
val method5 = { println("yuknight") }
method5() //调用method5函数
method5.invoke() //method5函数调用自身
//方式二
//这是一个函数,只不过此函数,没有输入参数, 有输出参数String类型
val method6 = { "yuknight" }
println(method6())
println(method6.invoke())
//方式三
//这是一个函数,只不过此函数,输入参数为2个Int类型, 输出参数String类型
val method7 = { number1: Int, number2: Int -> number1.toString() + number2.toString() }
println(method7(5, 2))
//方式四 (Int, Int)->Int
var method8 = { number1: Int, number2: Int -> number1 + number2 }
// (Int, Int) -> Int 省略不写,自动推断类型
//var method8: (Int, Int) -> Int = { number1: Int, number2: Int -> number1 + number2 }
//方式五
var method9: (Int) -> String //函数的声明
method9 = fun(value: Int): String = value.toString() + "yuknight" //函数的实现
println(method9.invoke(22))
//方式六 声明 + 实现
var method10: (Int, Int) -> String = fun(number1, number2) = number1.toString() + number2.toString()
// println(method10.invoke(2,3))
println(method10(2, 3))
if (method10(2, 3) is String) println("输出是String") else println("输出不是String")
//方式七
var method11: (String, String) -> Unit = { aStr, bStr -> println("aStr:$aStr, bStr:$bStr") }
method11("122", "333")
method11.invoke("122", "333")
//方式八
var method12: (String) -> Int = {
println("传入的是:$it")
34 //最后一行返回值
}
var r = method12.invoke("yuknght")
println(r)
//方式九
var method13: (Int) -> Unit = {
when (it) {
1 -> println("传入的值是1")
in 20..60 -> println("传入的值是20到60之间的数")
else -> println("都不满足")
}
}
method13.invoke(30)
//方式十
var method14: (Int, Int) -> Unit = { _, number2 ->
println("第二个参数是: $number2")
}
method14(3, 90)
//方式十一
var method15 = { str: Any -> str }
println(method15("yuknight"))
println(method15(23))
println(method15(false))
//方式十二
var method16 = { sex: Char ->
if (sex == '男') println("代表是先生")
else if (sex == '女') println("代表是女生")
else println("未知人类")
}
method16.invoke('男')
//方式十三
var method17:String.()->Unit ={
println("调用对象:$this")
}
"yuknight".method17() //对String类型对象进行扩展
}
Kotlin中Lambda的十三种形式
于 2022-02-11 22:09:01 首次发布
