1

下面的代码打印 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在外循环的内循环中,但根据输出显然不是这种情况?可以解释上述循环的行为吗?

4

2 回答 2

8

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

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

于 2013-11-09T12:06:18.733 回答
2
  • x 的第一次迭代将被省略,因为y <- 1 直到 1
  • 第二次迭代将打印 2,1 因为 x = 2 和y <- 1 直到 2

       ╔═══════════╦══════════╦═══════════╦════════════════╗
       ║   Cycle   ║     x    ║     y     ║      print     ║     
       ╠═══════════╬══════════╬═══════════╬════════════════╣
       ║     1     ║     1    ║     1     ║ omit iteration ║    
       ╠═══════════╬══════════╬═══════════╬════════════════╣
       ║     2     ║     2    ║     1     ║     (2,1       ║    
       ╚═══════════╩══════════╩═══════════╩════════════════╝
    
于 2017-01-26T13:28:37.900 回答