![]() |
1
13
是的,你可以。诀窍是使用尾部递归方法,以便本地堆栈帧只包含对
此外,必须确保传递给方法的内容
总结:
编辑: 请注意,这同样有效,不会导致内存不足错误:
编辑2:
对于reduceCleft,需要一个accumulator参数,可以使用默认参数将其设置为某个值。一个简单的例子:
|
![]() |
2
19
当我开始了解
万一你真的需要
如果你试试上面的那一行,它会很好地收集垃圾。我发现使用流是很难的,因为它很容易抓住头部而不意识到它。有时标准库会以非常微妙的方式为您保留它。 |
![]() |
3
2
你可能想看看斯卡拉兹的 ephemeral streams . |
![]() |
4
2
事实证明,这是 a bug 在目前实施的裁员。问题是ReduceCeleft调用foldLeft,因此ReduceCeleft的stackFrame在整个调用过程中保持对流头的引用。foldleft使用tail递归来避免这个问题。比较:
它们在语义上是等价的。在scala版本2.8.0中,对foldLeft的调用可以工作,但是对reduceCleft的调用抛出了一个内存不足的地方。如果减速器能自己工作,这个问题就不会发生。 |
![]() |
Wickoo · Scala变量解析:类与局部变量 4 月前 |
![]() |
Jake · 如何回滚臭鼬事务以进行集成测试?(缺少隐式原点) 6 月前 |
![]() |
Readren · 如何定义标量。标量3中元组的ValueOf? 1 年前 |
![]() |
Leif Andersen · “=>”在scala泛型中是什么意思? 1 年前 |