运行:
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)
你能解释一下吗?
答案 0 :(得分:6)
您获得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)
返回的流(不包含任何打印语句)。