运行:
lazy val s: Stream[Int] = 1 #:: 2 #:: {val x = s.tail.map(_+1); println("> " + x.head); x}
s.take(5).toList
我期望:
> List(2, 3)
> List(2, 3, 4)
List(1, 2, 3, 4, 5)
我得到:
> 3
List(1, 2, 3, 4, 5)
你能给我解释一下吗?
最佳答案
之所以得到Int
而不是List
,是因为s
是整数流,因此它包含整数,而不是列表。
之所以得到3,是因为(1,2,3,4,5,...)(即s
)的尾部是(2,3,4,5,...),并且如果您映射+1在那之上,您将得到(3,4,5,6,7,...)的头为3。
之所以只打印一个整数,是因为该表达式只计算一次就可以得到尾部的数据流。之后,仅评估s.tail.map(_+1)
返回的流(不包含任何打印语句)。