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)
您需要执行doStuff一个inline函数:仅内联的lambda支持非本地返回。
private inline fun doStuff(foo: () -> Unit) = foo.invoke()
Run Code Online (Sandbox Code Playgroud)
然后您的测试用例通过。