2012-11-05 112 views
4

我有產生以下述方式的枚舉的函數:無限枚舉倒帶

def create_example_enumerator(starting_value) 
    current = starting_value 
    e = Enumerator.new do |y| 
    loop do 
     current += 1 
     y << current 
    end 
    end 
end 

當前的行爲是非常簡單的。我想e.rewind將枚舉數重置爲它的起始值。 有沒有一個很好的方式來做到這一點,同時仍然使用無限枚舉器?

回答

5

這應該工作:

n = Enumerator.new do |y| 
    number = 1 
    loop do 
    y.yield number 
    number += 1 
    end 
end 

n.next #=> 1 
n.next #=> 2 
n.next #=> 3 
n.rewind 
n.next #=> 1 
+0

酷,謝謝。那很簡單。 – wrhall

+1

你可能想把解決方案放在文字上:「變量必須在枚舉器塊內部定義」,因爲你也爲'yield'更改'<<'似乎就是問題所在。任何想法爲什麼是必要的? – tokland

+0

我認爲這是有道理的 - 倒帶應該從塊的開始重新開始。如果您沒有在塊內定義初始編號,那麼當您從塊的起始處重新開始時,您的編號不會改變。 – wrhall