2011-03-27 61 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

相關問題