fun tryOpenController() {
paramManager.getParamByDefault { openByParam(it) }
}
fun getParamByDefault(callback: ((param: CameraParam) -> Unit)?) {
callback?.invoke(defaultParam())
}
private fun defaultParam(): CameraParam {
return remoteDefaultParam ?: getLocalDefault()
}
private fun openByParam(param: CameraParam) {
setCameraParam(param)
}
如图所示的代码,这种代码在执行的顺序为
1. 先执行paramManager.getParamByDefault,这个代码相当于
paramManager.getParamByDefault (openByParam(it))
2.在方法getParamByDefault中,callback是方法名,方法体是openByParam,defaultParam是方法callback的参数,
3.最终执行openByParam这个方法,参数是defaultParam
4.invoke的作用
callback?.invoke(default) 相当于 callback( default )
fun main(args: Array<String>) {
val lambda = {
left: Int, right: Int
->
left + right
}
println(lambda(2, 3))
}
大家可以看到我们定义了一个变量 lambda,赋值为一个 Lambda 表达式。Lambda 表达式用一对大括号括起来,后面先依次写下参数及其类型,如果没有就不写,接着写下 -> ,这表明后面的是函数体了,函数体的最后一句的表达式结果就是 Lambda 表达式的返回值,比如这里的返回值就是参数求和的结果。
后面我们用 () 的形式调用这个 Lambda 表达式,其实这个 () 对应的是 invoke 方法,换句话说,我们在这里也可以这么写:
println(lambda.invoke(2,3))