Return 来自 Kotlin 中的 lambda
Return from lambda in Kotlin
我是 Kotlin 编程的新手,对 return 从 lambda 中获取一些东西感到困惑。我想我理解得最多,但下面的代码确实给我带来了问题。
当写成 if(it==0) return@forEach
那么它应该意味着 return 在 forEach 循环之外。或者换句话说,退出 forEach 循环。但它仍然继续检查列表中的剩余项目。
这是我正在关注的代码
fun main(args: Array<String>) {
val listOf10 = listOf(2, 4, 0, 9, 8)
listOf10.forEach {
if (it == 0) return@forEach
println(it)
}
}
预期的输出是 2,4
,但它给出了 2,4,9,8
。
这里有人可以帮我解决这个问题吗?
谢谢
传递给 forEach
函数的 lambda 会为可迭代对象中的每个项目重复调用,因此如果您 return 从 lambda 早期,您只是 return lambda 的迭代调用。
您可以使用 run
作用域函数 lambda 上的标签来跳出函数,但它很笨拙:
run {
listOf10.forEach {
if (it == 0) return@run
println(it)
}
}
通常,您应该不需要太多,因为 forEach
旨在附加到函数调用链的末尾。当您只是想直接从一个变量迭代时,您应该使用传统的 for 循环。 See here 在 Kotlin 编码约定中。例如:
for (it in listOf10) {
if (it == 0) break
println(it)
}
当您处理一系列函数调用时,您通常会使用其他运算符来 control/filter 您想要迭代的内容,并在过滤后在最后添加一个 forEach
调用。例如:
listOf10.takeWhile { it != 0 }
.forEach { println(it) }
我是 Kotlin 编程的新手,对 return 从 lambda 中获取一些东西感到困惑。我想我理解得最多,但下面的代码确实给我带来了问题。
当写成 if(it==0) return@forEach
那么它应该意味着 return 在 forEach 循环之外。或者换句话说,退出 forEach 循环。但它仍然继续检查列表中的剩余项目。
这是我正在关注的代码
fun main(args: Array<String>) {
val listOf10 = listOf(2, 4, 0, 9, 8)
listOf10.forEach {
if (it == 0) return@forEach
println(it)
}
}
预期的输出是 2,4
,但它给出了 2,4,9,8
。
这里有人可以帮我解决这个问题吗?
谢谢
传递给 forEach
函数的 lambda 会为可迭代对象中的每个项目重复调用,因此如果您 return 从 lambda 早期,您只是 return lambda 的迭代调用。
您可以使用 run
作用域函数 lambda 上的标签来跳出函数,但它很笨拙:
run {
listOf10.forEach {
if (it == 0) return@run
println(it)
}
}
通常,您应该不需要太多,因为 forEach
旨在附加到函数调用链的末尾。当您只是想直接从一个变量迭代时,您应该使用传统的 for 循环。 See here 在 Kotlin 编码约定中。例如:
for (it in listOf10) {
if (it == 0) break
println(it)
}
当您处理一系列函数调用时,您通常会使用其他运算符来 control/filter 您想要迭代的内容,并在过滤后在最后添加一个 forEach
调用。例如:
listOf10.takeWhile { it != 0 }
.forEach { println(it) }