有没有办法在Kotlin中从内部调用匿名函数?

安迪

我正在尝试实现一种遍历回调的方法,但是我遇到了一个问题,即我无法递归调用其内部的函数。

该函数当前如下所示:

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

有没有办法在ListView中调用函数?

有没有办法将函数调用传递给内部对象?

有没有办法用javascript调用firebase API内部的函数?

有没有办法调用部分函数

JavaScript中有没有办法减少递归函数调用中的调用栈大小?

有没有办法在调用 nodejs 中的控制器之前调用函数

有没有办法让函数调用“继续”影响其调用者中的循环?

有没有办法使成员函数不能从构造函数中调用?

有没有办法在单独的 js 文件中为 jquery click() 函数调用函数?

有没有办法在javascript中调用对象内的所有函数?

有没有办法抑制Julia Jupyter笔记本中函数内部的输出?

有没有办法从函数内部定义的变量中获取信息?

有没有办法从bash中的函数内部获取脚本的位置参数?

有没有办法从方法中调用对象?

有没有办法在 Kotlin 中获取函数的参数列表

有没有办法将覆盖函数放在 Kotlin 的单独文件中?

有没有办法以角度调用html属性值中的函数?

有没有办法在函数调用中更改对对象的原始引用

有没有办法从bash函数调用中强制回显命令行?

有没有办法知道超类构造函数中调用对象的子类?C ++

有没有办法一次在JavaScript中多次调用函数?使用木偶

有没有办法从python中的调用函数访问变量?

有没有办法在C ++中复合函数?

bash中的“继承”;有没有办法在覆盖函数中调用super(没有eval)?

在 Python 中,有没有办法在内部函数体中使用外部函数中的变量?

函数名称与内核模块中的函数冲突。有没有办法先调用自己的函数?

有没有办法包装函数调用或使函数调用过载?

有没有办法从多层函数或内部函数产生变量?

有没有办法让 Racket Web 应用程序中的按钮调用文件中定义的函数?