一,代码:
binding.button1.setOnClickListener {
//定义一个函数类型的变量,用来返回参数的平方
val square: (Int) -> Int = { it * it } // `it` 代表传入的参数
println("square(5)的结果:"+square(5)) // 输出 25
//函数类型 作为operate函数的参数
fun operate(a: Int, b: Int, op: (Int, Int) -> Int): Int {
return op(a, b)
}
//调用
val result1 = operate(3, 4, { x, y -> x * y })
println("operate(3, 4) { x, y -> x * y } 的结果:"+result1) // 输出 12
//调用,当 Kotlin Lambda 作为函数的最后一个参数时,Lambda 可以被挪到外面
val result2 = operate(3, 4) { x, y -> x * y }
println("operate(3, 4) { x, y -> x * y } 的结果:"+result2) // 输出 12
//调用,一个命名函数
fun multiply(x: Int, y: Int) : Int {
return x * y
}
val result3 = operate(3, 4, ::multiply)
println("operate(3, 4, ::multiply) 的结果:"+result3) // 输出 12
//调用,一个匿名函数
val multi = fun(x: Int, y: Int) = x * y
val result4 = operate(3, 4, multi)
println("operate(3, 4, multi) 的结果:"+result4) // 输出 12
//Lambda 作为函数返回值
fun getOperator(): (Int, Int) -> Int {
return { x, y -> x + y }
}
//add这个变量的类型: (Int, Int) -> Int
val add = getOperator()
println("add(10, 5) 的结果:"+add(10, 5)) // 输出 15
//只有一个函数类型作为函数参数
fun highOrderFunction(operation: (Int, Int) -> Int): Int {
return operation(10, 20)
}
//当 Kotlin 只有一个 Lambda 作为函数参数时,() 可以被省略
val result = highOrderFunction { a, b -> a + b }
println("highOrderFunction { a, b -> a + b } 的结果:"+result) // 输出 30
//Kotlin 允许在 只有一个参数 的 Lambda 表达式中,使用 it 作为默认参数名称,省略显式声明。
val square1: (Int) -> Int = { it * it } //省略参数
val square2: (Int) -> Int = { x -> x * x } //不省略参数
val res1 = square1(5)
val res2 = square2(5)
println("square1(5) 的结果:"+res1) // 输出 25
println("square2(5) 的结果:"+res2) // 输出 25
//两个及以上参数时,必须显式声明
// 两个参数,必须显式声明
val add2: (Int, Int) -> Int = { a, b -> a + b }
println("add2(3, 4)的结果:"+add2(3, 4)) // 输出 7
}
二,运行结果:
![]()