我工作了很多的元素的2D網格,我有時需要枚舉這些元素,所以我有一個類,看起來像這樣:有沒有辦法將大小傳遞給`enum_for` /`to_enum`?
class Grid
def initialize(width, height)
@elements = Array.new(width * height, DEFAULT_ELEMENT)
end
def each(&block)
return enum_for(:each) unless block_given?
@elements.each(&block)
return self
end
end
這一直永遠的罰款,但今天才我是否意識到由#each
返回的Enumerator
不會延遲計算大小。我可以手動定義一個Enumerator
,但除了each
之外,我還有不少調查員,那樣會很乏味。
所以我想知道是否有像enum_for(:method, lazy_size)
這樣的東西,以便我可以寫enum_for(:each width * height)
。
燦你擴展你的意思是「懶散地計算大小」? – sawa
@sawa'Enumerable#count'必須枚舉整個集合,而'Enumerator#size'試圖計算* lazily *的大小,即不枚舉。 – Stefan