Ruby array中的许多方法在没有参数或块(index
,keep_if
,each
,drop_while
等等的情况下调用时返回枚举器。< / p>
答案 0 :(得分:5)
从文档到Enumerator
:
大多数方法都有两种形式:内容所在的块形式 评估枚举中的每个项目,以及非阻止形式 返回一个包含迭代的新枚举器。
这允许您将枚举器链接在一起。例如,你可以 将列表的元素映射到包含索引和元素的字符串 作为字符串通过:
puts %w[foo bar baz].map.with_index {|w,i| "#{i}:#{w}" } # => ["0:foo", "1:bar", "2:baz"]
Enumerator也可以用作外部迭代器。例如, 枚举器#next返回迭代器的下一个值或引发 如果枚举器在最后,则为StopIteration。
e = [1,2,3].each # returns an enumerator object. puts e.next # => 1 puts e.next # => 2 puts e.next # => 3 puts e.next # raises StopIteration
我很抱歉复制粘贴,但我无法更好地解释。
答案 1 :(得分:3)
Enumerator类存在的主要原因是方法链:
array.each.with_object [[], []] { |element, memo| ... }
基本上,你不必担心这一点。