0
我有一个深深的“嵌套”的理解,简化到3层以下:x,y和z。我希望做只有X A Stream
将使y和z计算懒惰太:嵌套懒理解
val stream = for {
x <- List(1, 2, 3).toStream
y <- List("foo", "bar", "baz")
z = {
println("Processed " + x + y)
x + y
}
} yield z
stream take (2) foreach (doSomething)
但这种计算所有3个元素,由3个打印证明。我只想计算前两个,因为这些都是我从流中提取的。我可以通过在第二个List
等上调用toStream
来解决此问题。有没有更好的方法比在理解的每个级别上调用?
澄清我的问题。我不打算z是'单位'。现在有3个打印前面,即使我只采取流的前2个元素和'doSomething'。我如何使第三次打印(“计算”)不会发生? – Bluu 2012-03-24 06:32:07
@Bluu这三个计算是针对'y'的每个元素,应该从“1”数字中清楚。就像我说的,头部总是被评估。尝试'流4取foreach println',你会看到,第二批只计算前3后采取 – 2012-03-24 06:39:17
我现在看到。谢谢。为了严格评估head_的头部,这就是为什么我需要调用List(“foo”,“bar”,“baz”)。toStream'。你知道有什么方法吗? – Bluu 2012-03-24 18:08:58