当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Ruby Enumerator.produce用法及代码示例


本文简要介绍ruby语言中 Enumerator.produce 的用法。

用法

produce(initial = nil) { |prev| block } → enumerator

从任何块创建一个无限枚举器,只是一遍又一遍地调用。上一次迭代的结果传递给下一次。如果提供了initial,则传递给第一次迭代,成为枚举数的第一个元素;如果未提供,则第一次迭代接收 nil ,其结果成为迭代器的第一个元素。

从块中提高 StopIteration 会停止迭代。

Enumerator.produce(1, &:succ)   # => enumerator of 1, 2, 3, 4, ....

Enumerator.produce { rand(10) } # => infinite random number sequence

ancestors = Enumerator.produce(node) { |prev| node = prev.parent or raise StopIteration }
enclosing_section = ancestors.find { |n| n.type == :section }

::produce Enumerable 方法(如 Enumerable#detect Enumerable#slice_after Enumerable#take_while )一起使用可以为whileuntil 循环提供基于枚举器的替代方案:

# Find next Tuesday
require "date"
Enumerator.produce(Date.today, &:succ).detect(&:tuesday?)

# Simple lexer:
require "strscan"
scanner = StringScanner.new("7+38/6")
PATTERN = %r{\d+|[-/+*]}
Enumerator.produce { scanner.scan(PATTERN) }.slice_after { scanner.eos? }.first
# => ["7", "+", "38", "/", "6"]

相关用法


注:本文由纯净天空筛选整理自ruby-lang.org大神的英文原创作品 Enumerator.produce。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。