调用递归 lambda 表达式

Calling a recursive lambda expression

我这里有发送请求的函数

fun request(requestCode: Int, callback: (Boolean) -> Unit) {
    val result = false
    // Some job...
    callback(result)
}

显然,这个函数接受一个 lambda 表达式作为参数。 现在,当我需要从主函数调用这个函数时,我有这样的场景,如果回调结果为真,我需要做一些工作,否则,我需要再次重复请求。

fun main() {
    request(10) { result ->
        if (result) {
            // Success
        } else {
            // Here I need to make the request again
            request(10) { result2 ->
                // And so on..
            }
        }
    }

}

现在的问题是我需要无限期地重复调用!! 我该如何解决这个问题?

你可以做的一件事就是,打电话给main!由于 main 立即调用 request,调用 main 将调用 request:

fun main() {
    request(10) { result ->
        if (result) {
            // Success
        } else {
            main()
        }
    }
}

如果您在 main 中的 request 之前有其他代码,只需在 调用 request 的函数中调用 request ]立即:

fun requestUntilSuccess() {
    request(10) { result ->
        if (result) {
            // success
        } else {
            requestUntilSuccess()
        }
    }
}

fun main() {
    // some other code...

    requestUntilSuccess()
}

但是,如果请求一直失败,它将永远如此。您可能想要添加一个 maxTries 参数:

fun requestUntilSuccess(maxTries: Int) {
    if (maxTries == 0) {
        // out of tries
        return
    }
    request(10) { result ->
        if (result) {
            // success
        } else {
            requestUntilSuccess(maxTries - 1)
        }
    }
}