當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。