为什么内联函数的非本地返回从 lambda 返回但继续执行内联函数?

问题描述 投票:0回答:1

无法理解 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”。怎么会发生这种事? 根据我的理解,它与文档中的以下描述相矛盾

有人可以解释一下吗?

kotlin lambda inline
1个回答
0
投票

您没有进行异地退货。您正在执行本地返回,因为您使用了

@inlined
。本地 return 从 lambda 返回,因此在
block
函数内部调用
inlined()
后代码继续执行。下一行是
println("hi!")
。然后
inlined()
返回,代码继续在
foo()
函数内执行。

如果您通过调用

return
而不是
return@inlined
进行非本地返回,那么您在控制台中看到的唯一内容就是
5
。永远不会到达
println("6")
代码,因为您将直接从
foo()
返回。

© www.soinside.com 2019 - 2024. All rights reserved.