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

时间:2012-08-12 11:03:33

标签: ruby-on-rails ruby coding-style

Ruby array中的许多方法在没有参数或块(indexkeep_ifeachdrop_while等等的情况下调用时返回枚举器。< / p>

  • 何时使用此形式的方法,而不是使用块调用它们?

2 个答案:

答案 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| ... }

基本上,你不必担心这一点。