【发布时间】:2011-03-28 14:59:50
【问题描述】:
弱引用。基本上,我需要一个数字序列,其中一些在不再需要时可以取消分配。
【问题讨论】:
-
你应该庆幸自己没有弱流(抱歉,无法抗拒)
-
@Sciss 抱歉,我搜索时找不到任何东西……嗯,有时会发生这种情况,对吧?
弱引用。基本上,我需要一个数字序列,其中一些在不再需要时可以取消分配。
【问题讨论】:
scalaz.EphemeralStream 是你想要的。
【讨论】:
视图为您提供了一个惰性集合,其中每个值都根据需要进行计算。
【讨论】:
您可以做的一件事是创建一个Iterable 而不是Stream。你的Iterable 需要提供一个iterator 方法,它返回一个带有hasNext 和next 方法的迭代器。
当您遍历 Iterable 时,hasNext 和 next 将被调用以根据需要生成元素,但它们不会存储在任何地方(就像 Stream 那样)。
简单示例:
class Numbers extends Iterable[Int] {
def iterator = new Iterator[Int] {
private var num = -1
def hasNext = num < 99
def next = { num += 1; num }
}
}
【讨论】:
Iterable 拥有大多数 Scala 收集方法(包括 foreach、map、filter、foldLeft 等),因此您可以将其用于 func 编程,就像任何其他集合和记忆:我以为你想要的东西不保留生成的值?