关于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
相关产品推荐
相关产品推荐

