在Ruby数组中使用返回枚举器的方法的正确方法是什么?

dav*_*rac 4 ruby coding-style ruby-on-rails

Ruby数组中的许多方法在没有参数或块(index,keep_ifeach,drop_while以及更多)的情况下调用时返回枚举器.

  • 什么时候使用这种形式的方法,而不是用块调用它们?

Fle*_*oid 5

从文档到Enumerator:

大多数方法都有两种形式:一种是块形式,其中内容是为枚举中的每个项目计算的,另一种是非块形式,它返回一个包含迭代的新枚举器.

这允许您将枚举器链接在一起.例如,您可以将列表的元素映射到包含索引的字符串,并将元素映射为字符串,方法是:

puts %w[foo bar baz].map.with_index {|w,i| "#{i}:#{w}" }
# => ["0:foo", "1:bar", "2:baz"]
Run Code Online (Sandbox Code Playgroud)

枚举器也可以用作外部迭代器.例如,Enumerator#next返回迭代器的下一个值,或者如果Enumerator在结尾处则引发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
Run Code Online (Sandbox Code Playgroud)

我很抱歉复制粘贴,但我无法解释得更好.