You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于Kotlin中Lambda表达式内return语句的作用及写法疑问

关于这段Kotlin代码的return逻辑解析

先看你给出的代码:

fun foo() {
    listOf(1, 2, 3, 4, 5).forEach {
        if (it == 3) return // non-local return directly to the caller of foo()
        print(it)
    }
    println("this point is unreachable")
}

fun main() {
    foo()
}

针对你的问题逐一解答:

1. return语句具体执行什么操作?

这个return是非局部返回,它会直接终止整个foo()函数的执行流程,而不是仅仅退出当前的forEach循环lambda。当遍历到元素3时,触发这个return,后续的print(it)(针对4、5)以及forEach之后的println都不会执行。

2. 它返回的是什么?

因为foo()函数没有声明返回值(默认返回Unit,相当于Java的void),所以这个return没有返回任何具体的数值或对象,只是单纯终止函数运行。

3. 返回至何处?

它会直接返回到foo()的调用位置——也就是main()函数中调用foo()之后的代码行(这里main()调用foo()后没有其他代码,所以程序执行完foo()就结束了)。

4. 可以写成更冗长的形式吗?

当然可以,用传统的for循环替代forEach的lambda写法,逻辑完全等价且更直观:

fun foo() {
    val numbers = listOf(1, 2, 3, 4, 5)
    for (number in numbers) {
        if (number == 3) {
            // 这里的return同样直接终止foo()函数
            return
        }
        print(number)
    }
    println("this point is unreachable")
}

fun main() {
    foo()
}

这段代码的输出和原代码完全一致,都是12。

内容的提问来源于stack exchange,提问作者four-eyes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 19:01:09