📜  return@foreach 不工作 kotlin (1)

📅  最后修改于: 2023-12-03 15:19:49.052000             🧑  作者: Mango

Kotlin 中的 return@foreach 不工作

在 Kotlin 中,使用 return 关键字来退出循环的语法与其他循环语言并不相同,这也许会导致开发人员在编写代码时遇到一些问题。

问题

当在 forEach 循环中使用 return 关键字时,只会退出当前的一次循环而不是整个循环。下面的代码示例演示了这个问题:

val list = listOf("apple", "banana", "orange", "pear", "grape")

fun processFruit() {
    list.forEach {
        if (it == "orange") {
            return // 仅退出了当前的一次循环
        }
        println("Processing $it")
    }
}

processFruit()

输出结果:

Processing apple
Processing banana
Processing pear
Processing grape

可以看到循环没有被完全退出,"orange" 这个元素后的元素仍然被处理了。

解决方法

使用 forEach 循环时,在需要退出循环的地方使用 return@forEach 而不是 return 关键字,这样才能退出整个循环。以下是修改后的示例代码:

val list = listOf("apple", "banana", "orange", "pear", "grape")

fun processFruit() {
    list.forEach {
        if (it == "orange") {
            return@forEach // 退出整个循环
        }
        println("Processing $it")
    }
}

processFruit()

输出结果:

Processing apple
Processing banana
结论

在 Kotlin 中,使用 return 关键字仅会退出当前的一次循环而不是整个循环,必须使用 return@forEach 退出整个循环。

注:以上示例代码为 Kotlin 1.5.30 版本,其他版本的表现可能不同。