无法理解 kotlin 逻辑。求sush代码
inline fun inlined( block: () -> Unit) {
block()
println("hi!")
}
fun foo() {
inlined {
println("5")
return@inlined // OK: the lambda is inlined
println("5")
}
println("6")
}
fun main() {
foo()
}
期望这样的输出“56”,但得到“5hi!6”。怎么会发生这种事? 根据我的理解,它与文档中的以下描述相矛盾
有人可以解释一下吗?
您没有进行异地退货。您正在执行本地返回,因为您使用了
@inlined
。本地 return 从 lambda 返回,因此在 block
函数内部调用 inlined()
后代码继续执行。下一行是println("hi!")
。然后 inlined()
返回,代码继续在 foo()
函数内执行。
如果您通过调用
return
而不是 return@inlined
进行非本地返回,那么您在控制台中看到的唯一内容就是 5
。永远不会到达 println("6")
代码,因为您将直接从 foo()
返回。