在Scala中解释for循环

时间:2013-11-09 12:00:07

标签: scala

下面的代码打印2,1

val n = 3                                       
val i = 3    

for {
  i <- 1 until n
  j <- 1 until i
} println(i+","+j)  

不打印:

1,1
1,2
1,3
2,1
2,2
2,3
3,1
3,2
3,3

我在外循环的内循环中查看j <- 1 until i但根据输出显然不是这种情况?可以解释一下上面的循环行为吗?

2 个答案:

答案 0 :(得分:8)

i中的println(i+","+j)是指i <- 1 until n中的i,而不是顶级定义val i = 3

另一件需要注意的事情是1 until n是范围1..n-1,而不是1..n。如果要包含上限,则应使用to

答案 1 :(得分:1)

  • x的第一次迭代将被省略,因为 y&lt; -1 - 1
  • 第二次迭代将打印2,1因为x = 2而 y < - 1直到2

       ╔═══════════╦══════════╦═══════════╦════════════════╗
       ║   Cycle   ║     x    ║     y     ║      print     ║     
       ╠═══════════╬══════════╬═══════════╬════════════════╣
       ║     1     ║     1    ║     1     ║ omit iteration ║    
       ╠═══════════╬══════════╬═══════════╬════════════════╣
       ║     2     ║     2    ║     1     ║     (2,1       ║    
       ╚═══════════╩══════════╩═══════════╩════════════════╝