打破Kotlin中的匿名功能

Ryb*_*yba 2 loops return kotlin

创建了一个测试用例以尝试表示我要执行的操作。我无法弄清楚如何“停止”继续在匿名函数中进行工作。在下面的示例中,如果答案正确,我想突破“苹果”部分。下面的代码无法编译,因为它说的是return @ apple而不是return @ banana,这是唯一有效的选项,但是我在下面编写了此代码,以尝试解释我要实现的目标并更好地理解如何进行类似的操作这个。

class FunctionBreakingTest {
    @Test fun stopInMiddleOfLambda() {
        var answer = "wrong"
        doStuff apple@ {
            doStuff banana@ {
                answer = "correct"
                if (answer == "correct") {
                    return@apple
                }
                answer = "wrong"
            }

            answer = "wrong"
        }

        assertEquals("correct", answer)
    }

    private fun doStuff(foo: () -> Unit) = foo.invoke()
}
Run Code Online (Sandbox Code Playgroud)

hot*_*key 5

您需要执行doStuff一个inline函数:仅内联的lambda支持非本地返回

private inline fun doStuff(foo: () -> Unit) = foo.invoke()
Run Code Online (Sandbox Code Playgroud)

然后您的测试用例通过。