1
我写了下面的代码使用的Scala流斯卡拉流处理
def foo(x: Int) : Stream[Int] = {println("came inside"); (2 * x)} #:: foo(x + 1)
foo(1).takeWhile(_ < 6).toList.foreach(x => println(s"+++ $x"))
这工作,并产生下列输出
came inside
came inside
came inside
+++ 2
+++ 4
,但我想的处理发生像
came inside
+++ 2
came inside
+++ 4
came inside
基本上我想一个接一个地处理,直到终止条件< 6会见。我想它是我的“tolist”方法,它首先创建一个巨大的列表,然后才处理它。
i)你正在定义一个带有副作用(即'println')的流,这是很难处理和难以推理。 ii)是的,'toList'将“实现流”,所以它会触发所有的副作用,然后再执行你之后调用的任何东西。 – rsenna