Ruby 数组中的许多方法在没有参数或块( index
、keep_if
、each
等等)的情况下调用时会返回一个枚举器drop_while
。
- 什么时候适合使用这种形式的方法,而不是用块调用它们?
Ruby 数组中的许多方法在没有参数或块( index
、keep_if
、each
等等)的情况下调用时会返回一个枚举器drop_while
。
从文档到Enumerator
:
大多数方法有两种形式:一种是对枚举中每个项目的内容进行评估的块形式,另一种是返回一个包装迭代的新 Enumerator 的非块形式。
这允许您将枚举器链接在一起。例如,您可以通过以下方式将列表的元素映射到包含索引和元素的字符串:
puts %w[foo bar baz].map.with_index {|w,i| "#{i}:#{w}" } # => ["0:foo", "1:bar", "2:baz"]
枚举器也可以用作外部迭代器。例如,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
我很抱歉复制粘贴,但我无法更好地解释。
Enumerator 类存在的主要原因是方法链:
array.each.with_object [[], []] { |element, memo| ... }
所以基本上,你不需要担心这个。