kotlin intProgression 不迭代?

gri*_*rdo 2 kotlin

抱歉,这看起来很基本,但我错过了一些东西

我有一个方法签名覆盖

fun doSomeWork (range: IntProgression, j: Int): List<Cell>{
Run Code Online (Sandbox Code Playgroud)

我想迭代范围,无论它是什么(可以是向上或向下,比如 1 到 4 或 4 到 1)。该范围本身似乎有效,所以在我的 4 到 1 示例中

    println (range.first.toString() + " to " + range.last.toString() + ", step = " + range.step)
Run Code Online (Sandbox Code Playgroud)

打印“4 比 1,步长 = 1”

但我似乎无法迭代范围?我尝试过一些事情

for (i in range) {
     println ("range: $i)"
}
Run Code Online (Sandbox Code Playgroud)

进而

for (i in range.first until range.last step range.step){
        println ("Loop de loop $i")
    }
Run Code Online (Sandbox Code Playgroud)

(虽然写这个问题时我注意到它是步骤1而不是-1,这可能是这里的问题?但因为我希望能够在任一方向的范围内通过,所以我没有检查)

进而

 range.forEach { println ("range foreach") }
Run Code Online (Sandbox Code Playgroud)

它们都不会打印任何内容,但它们不会抛出错误,因此之后的任何代码都可以正常运行。

谁能指出为什么我无法完成这项入门级任务?!

Rol*_*and 5

所以你想要一个IntProgression从 4 到 1 的步骤 -1,即IntProgression.fromClosedRange(4, 1, -1)或者更好:4.downTo(1)。当你写下你的问题时,你已经意识到了这个步骤......但起点不是1那时,而是4;-)downTo这样的问题不会出现,因为该函数会处理方向,并且那时也更具可读性。

另请注意,您可以简单地使用reversed来反转进程:

range.reversed()
Run Code Online (Sandbox Code Playgroud)

并在for-loop 或 with.forEach等中使用它。

所以:

val range = IntProgression.fromClosedRange(1, 4, 1)
range.forEach(::print) // prints: 1234
range.reversed().forEach(::print) // prints: 4321
Run Code Online (Sandbox Code Playgroud)