在Python中,我可以像这样做:
lazy = ((i,j) for i in range(0,10000) for j in range(0,10000))
sum((1 for i in lazy))
这需要一段时间,但内存使用是恒定的。
在 Scala 中相同的结构:
(for(i<-0 to 10000; j<-i+1 to 10000) yield (i,j)).count((a:(Int,Int)) => true)
过了一会儿,我会遇到一个java.lang.OutOfMemoryError
错误,尽管它应该被惰性评估。
j
应该是从i+1 到 10000
,而不是1 到 10000
。现在已经修复了。 - Ben James