【发布时间】:2012-08-12 11:03:32
【问题描述】:
Ruby array 中的许多方法在不带参数或块(index、keep_if、each、drop_while 等等)的情况下调用时会返回一个枚举器。
- 什么时候适合使用这种形式的方法,而不是用块来调用它们?
【问题讨论】:
标签: ruby-on-rails ruby coding-style
Ruby array 中的许多方法在不带参数或块(index、keep_if、each、drop_while 等等)的情况下调用时会返回一个枚举器。
【问题讨论】:
标签: ruby-on-rails ruby coding-style
从文档到Enumerator:
大多数方法有两种形式:块形式,内容是 对枚举中的每个项目进行评估,以及一个非块形式 返回一个包装迭代的新枚举器。
这允许您将枚举器链接在一起。例如,您可以 将列表的元素映射到包含索引和元素的字符串 作为字符串通过:
puts %w[foo bar baz].map.with_index {|w,i| "#{i}:#{w}" } # => ["0:foo", "1:bar", "2:baz"]枚举器也可以用作外部迭代器。例如, Enumerator#next 返回迭代器的下一个值或引发 如果 Enumerator 在末尾,则停止迭代。
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| ... }
所以基本上,你不需要担心这个。
【讨论】: