Tag: 循环

在Kotlin的`forEach`中`break`和`continue`

Kotlin有非常好的迭代函数,比如forEach或者repeat ,但是我不能让break和continue它们(local和non-local): 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中的匿名函数

创建一个测试用例来表示我正在尝试做什么。 我无法弄清楚如何“停止”继续在匿名函数中工作。 在下面的例子中,如果答案是正确的,我想跳出“苹果”部分。 下面的代码不能编译,因为它说的是返回@苹果而不是返回@香蕉这是唯一有效的选项,但我写下来试图解释我想要达到的目标,并更好地理解如何去做类似这个。 class FunctionBreakingTest { @Test fun stopInMiddleOfLambda() { var answer = “wrong” doStuff apple@ { doStuff banana@ { answer = “correct” if (answer == “correct”) { return@apple } answer = “wrong” } answer = “wrong” } assertEquals(“correct”, answer) } private fun doStuff(foo: () -> Unit) = foo.invoke() }

在Kotlin中更改循环索引

我如何修改Kotlin中的循环variables? 对于我的具体情况,我有一个for循环,其中,在某些情况下,我想跳过下一个迭代: for(i in 0..n) { // … if(someCond) { i++ // Skip the next iteration } } 但是,当我尝试这个时,我被告知“val不能被重新分配”。

Kotlin for每个订单

Kotlin forEach是否按照数组的实际顺序遍历一个数组,或者有时可能以另一个顺序? 我的意思是这总是打印1,2,3,… 9或它可能打印这样的1,5,3,4,… val numbers: Array = array(1,2,3,4,5,6,7,8,9) numbers.forEach({(number: Int) -> Log.d(tag,number) }) Kotlin forEach参考