我是Scala的新手,从命令性的背景来看这个,但我想用功能术语来理解它.我对以下代码片段的行为非常困惑.
val res = for {
i <- 1 to 2
j <- 1 to 2
} yield (i, j)
println(s"res is $res")
Run Code Online (Sandbox Code Playgroud)
此代码将打印res是Vector((1,1),(1,2),(2,1),(2,2))如预期的那样.但是稍微修改上面的内容
val res = for {
i <- 1 to 2
j <- i to 0
} yield (i, j)
println(s"res is $res")
Run Code Online (Sandbox Code Playgroud)
打印res是Vector()
为什么第二个版本的循环不会产生Vector((1,1),(1,0),(2,2),(2,1),(2,0))?
这种行为对我使用Scala中的索引遍历2D矩阵的能力产生了重大影响.一般来说,如何在一个惯用的方式中循环遍历矩阵的上三角部分,同时跟踪行和列索引?