Scala “Stream.take”的奇怪行为`

Scala “Stream.take”的奇怪行为`,scala,stream,Scala,Stream,我正在尝试scala.Stream的一些方法,并定义了这样一个方法: def my(n: Int) = { scala.Stream.from(1).flatMap { i => println("### " + i) scala.Stream.from(i).takeWhile(_ < 10).map(j => (i, j)) }.take(n).filter(x => x._1 < 3 && x._2 < 5).to

我正在尝试scala.Stream的一些方法,并定义了这样一个方法:

def my(n: Int) = {
  scala.Stream.from(1).flatMap { i =>
    println("### " + i)
    scala.Stream.from(i).takeWhile(_ < 10).map(j => (i, j))
  }.take(n).filter(x => x._1 < 3 && x._2 < 5).toList
}
其终止速度非常快,并打印:

### 1
### 2
### 3
### 4
### 5
### 6
### 7
### 8
### 9
List((1,1), (1,2), (1,3), (1,4), (2,2), (2,3), (2,4))
但是如果
n
46
,它将永远不会结束:

### 1
### 2
### 3
### 4
### 5
### 6
...
### 245684
### 245685
### 245686
### 245687
### 245688
### 245689
### 245690
### 245691
...
为什么这么奇怪


注:我的scala版本是
2.11.7

平面图结果中的第45个条目是(9,9)。这是可以从数字i<10生成的最后一个元组。因此,为了生成第46个元组,代码接下来尝试i=10,但是
Stream.from(i).takeWhile(<10)
没有返回有效的元组,因此代码立即转到i=11,以此类推,给出您看到的打印行,但从未为流生成新元素

### 1
### 2
### 3
### 4
### 5
### 6
...
### 245684
### 245685
### 245686
### 245687
### 245688
### 245689
### 245690
### 245691
...