2011-03-27 96 views
6

弱参考文献。基本上,我需要一系列数字,其中一些数字可以在不再需要时被分配。是否有像流这样的数据结构,但是很弱?

+4

你应该庆幸你没有弱流(对不起,忍不住) – 2011-03-27 18:45:59

+0

http://stackoverflow.com/questions/4132924/functional-processing- of-scala-streams-without-outofmemory-errors – 2011-03-27 20:09:54

+0

@Sciss对不起,当我搜索时找不到任何东西......呃,有时候会发生,对吗? – Anonymous 2011-03-27 21:31:45

回答

5

scalaz.EphemeralStream是你想要的。

0

视图为您提供了一个懒惰的集合,其中每个值都根据需要进行计算。

+0

为了学习的目的,这个答案不正确? – Bradford 2011-03-27 21:09:22

+0

是的。我已经有一个懒惰的集合(流),但我需要它也很弱。 – Anonymous 2011-03-27 21:22:43

+0

这个问题的整个观点...呃!谢谢。我会在这里留下我的回答让其他人看到这些评论。也许有人可以解释为什么视图不弱? – Bradford 2011-03-27 21:33:18

0

你可以做的一件事是创建一个Iterable而不是一个Stream。您的Iterable需要提供iterator方法,该方法返回包含hasNextnext方法的迭代器。

当环比IterablehasNextnext将被调用来生成的元素在需要的时候,但他们不存储(如Stream一样)。

简单的例子:

class Numbers extends Iterable[Int] { 
    def iterator = new Iterator[Int] { 
    private var num = -1 

    def hasNext = num < 99 
    def next = { num += 1; num } 
    } 
} 
+0

这没有什么帮助,因为我需要一个流,有两个原因:函数式编程(=不是迭代器)和记忆(不是迭代器)。 – Anonymous 2011-03-28 22:50:59

+0

@匿名 - 请注意''Iterable'拥有大多数Scala收集方法(包括'foreach','map','filter','foldLeft'等),因此您可以像使用其他集合一样使用它进行func编程,我以为你想要的东西*不*保留生成的值? – Jesper 2011-03-29 11:03:37

+0

它应该保留它们,但不是永久的。看看(我认为)java.lang.ref.WeakReference。 – Anonymous 2011-03-29 12:29:11

相关问题