kotlin 中 return 语句会从最近的函数或匿名函数中返回,这意味着下面两个函数是不同的:
fun foo(ints: IntArray) {
ints.forEach {
if (it == 0) return
print(it)
}
}
fun bar(ints: IntArray) {
ints.forEach(fun(value: Int) {
if (value == 0) return
print(value)
})
}
foo 在遇到 0 时会直接返回,bar 遇到 0 时会跳过它继续执行。
foo 的代码看上去很漂亮,forEach 给人一种在用 for 循环的感觉,遇到 return 直接从 foo 中返回,似乎也挺合理的。
但是 forEach 接收的毕竟是一个 lamda 表达式,这种设计导致匿名函数和 lambda 表达式行为不一致,为此 kotlin 还提供了 @Label 来控制返回语句:
fun foo(ints: IntArray) {
ints.forEach {
if (it == 0) return@forEach
print(it)
}
}
大家觉得这种设计是好是坏?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.