我工作了很多的元素的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