2013-04-17 40 views
2

我已經開始使用Ruby 2.0中的Enumerable :: Lazy功能,它看起來非常有用。默認情況下創建一個枚舉對象惰性

我有一個Enumerable集合,通過遠程數據源頁面。因此,我希望它是一個「懶惰」的集合。但是,我不想指示我的班級的每個用戶在每次使用任何Enumerable方法時都調用.lazy。相反,包含一個假設的LazyEnumerable模塊並且默認情況下所有可枚舉的方法都是惰性的會很好。

有沒有人有一個乾淨的方式來完成這個任何想法?謝謝!

+0

爲什麼不把枚舉保存在你的類中作爲懶惰枚舉來啓動? – AJcodez

+0

我希望我的收藏懶得成爲實現細節。 –

回答

1

我有一個想法,我想我會採取刺傷在此:

module LazyEnumerable 
    include Enumerable 

    def self.make_lazy(*methods) 
    methods.each do |method| 
     define_method method do |*args, &block| 
     lazy.public_send(method, *args, &block) 
     end 
    end 
    end 

    make_lazy *(Enumerable.public_instance_methods - [:lazy]) 
end 

好奇,想知道是否有這樣做更可靠的方法。

+0

問題是你的解決方案有什麼問題?我認爲這看起來不錯,它不會比這更簡單。 –