【发布时间】:2015-12-09 01:07:18
【问题描述】:
Kotlin 有非常好的迭代函数,例如 forEach 或 repeat,但我无法使 break 和 continue 运算符与它们一起工作(本地和非本地):
repeat(5) {
break
}
(1..5).forEach {
continue@forEach
}
我们的目标是用尽可能接近的函数语法来模拟通常的循环。在某些旧版本的 Kotlin 中绝对可以,但我很难重现语法。
问题可能是标签 (M12) 的错误,但我认为第一个示例应该可以正常工作。
在我看来,我在某个地方读到了一个特殊的技巧/注释,但我找不到关于这个主题的任何参考资料。可能如下所示:
public inline fun repeat(times: Int, @loop body: (Int) -> Unit) {
for (index in 0..times - 1) {
body(index)
}
}
【问题讨论】:
-
在当前的 Kotlin 中,您确实可以模仿这一点(在等待
continue@label和break@label功能时),请参阅相关问题:stackoverflow.com/questions/34642868/… -
这个问题可以用来澄清您是否只询问
break和continue是否存在功能循环,或者您是否正在寻找做同样事情的替代答案。前者似乎是这样,因为你拒绝了后者。 -
似乎它们是在 kotlin 1.3 中添加的
-
@TigranBabajanyan 哇!有链接吗?
-
@voddan,不,我刚刚试过了
标签: loops foreach lambda kotlin