定义
参数类型是一个函数 或返回值是一个函数的 函数称为高阶函数
参考:https://blog.csdn.net/mr_hmgo/article/details/118935302
应用1: 我们定义一个函数,根据调方不同的逻辑 返回 + - * /的结果
/**
* 计算数值
*/
fun calculation(number1: Int, number2: Int, operation: (Int, Int) -> Int): Int {
return operation(number1, number2)
}
使用 乘法
val result = calculation(30, 50) { number1, number2 ->
//最后一行语句在上面定义的时候已经确定类型了所以不要toString 如果类型不匹配的话会报错 return 也不要加了
number1 * number2
}
使用 减法
val result = calculation(30, 50) { number1, number2 ->
//最后一行语句在上面定义的时候已经确定类型了 return 也不要加了
number1 - number2
}
应用2 Android中回调
class PrepareDesc {
//声明一个方法 当然可以当做当前类的变量嘛
var successAction: (() -> Unit)? = null
var failedAction: (() -> Unit)? = null
fun invokeMethod(): Unit {
prepareResource({
successAction?.invoke()
},{
failedAction?.invoke()
})
}
/**
* 高阶函数回调用的用法
*/
val isSuccess: Boolean = true
private fun prepareResource(success: () -> Unit, failed: () -> Unit): Unit {
if (isSuccess) {
success.invoke()
} else {
failed.invoke()
}
}
}
使用
var prepareDesc = PrepareDesc()
prepareDesc.successAction = {
//在这里说明执行成功了
"20" + "30"
}
prepareDesc.invokeMethod() //执行
image.png
image.png image.png
在这里我们认为走了onSuccess方法
prepareDesc.successAction = {
"20" + "30"
}
不理解高阶函数可以这样想
为什么success 是从 1 到3的步骤 从里向外调用的呢 ?
首先我们把 执行1 的 success.invoke() success就看作是一个参数 在这里的时候 这个sucess 是通过 prepareResoure(success:()->Unit) 传过来的 方便调用 这个方法谁传
那也就到了 执行2
image.png
注意 执行2 里的 successAction?.invoke() 这个invoke 的意思就是执行 successAction的方法体
successAction 并没有方法体 这里我们把 successAction当作一个变量 使用一个变量 我们要调用其 get 方法
而这里就是其 get 方法的地方
image.png
网友评论