我正在尝试实现一种遍历回调的方法,但是我遇到了一个问题,即我无法递归调用其内部的函数。
该函数当前如下所示:
fun <T : Any?, E : Any?> runSerial(
transfer: T,
callbacks: List<(T, (T) -> Unit, (E) -> Unit) -> Unit>,
onSuccess: (T) -> Unit,
onError: (E) -> Unit
) {
val mutableCallbacks = callbacks.toMutableList()
val runTopCallback = fun(value: T) {
if (callbacks.count() == 0) {
onSuccess(value)
return
}
val nextCallback = mutableCallbacks.first()
mutableCallbacks.remove(nextCallback)
nextCallback(value, runTopCallback, onError)
}
runTopCallback(transfer)
}
有没有一种方法可以重新编码代码,以便runTopCallback
可以将其传递给nextCallback
调用?
使用lateinit
局部变量(自Kotlin 1.2起):
lateinit var runTopCallback: (T) -> Unit
runTopCallback = fun(value: T) {
// ...
nextCallback(value, runTopCallback, onError)
}
问题是runTopCallback
在尝试使用它时尚未声明或定义(因为这是在声明+赋值语句中)。
解决方案是先声明它-在这种情况下lateinit
,最好的方法是,它允许一个初始无值的变量(因此,其名称类似于“空初始化”变量),但是在使用它时不需要进行空检查。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句