本文簡要介紹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
)一起使用可以為while
和until
循環提供基於枚舉器的替代方案:
# 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 Enumerator.peek_values用法及代碼示例
- Ruby Enumerator.peek用法及代碼示例
- Ruby Enumerator.each用法及代碼示例
- Ruby Enumerator.feed obj用法及代碼示例
- Ruby Enumerator.size用法及代碼示例
- Ruby Enumerator.new用法及代碼示例
- Ruby Enumerator.with_object用法及代碼示例
- Ruby Enumerator.each_with_object用法及代碼示例
- Ruby Enumerator.e + enum用法及代碼示例
- Ruby Enumerator.next_values用法及代碼示例
- Ruby Enumerator.next用法及代碼示例
- Ruby Enumerator each_with_index用法及代碼示例
- Ruby Enumerator each_with_object用法及代碼示例
- Ruby Enumerator類用法及代碼示例
- Ruby Enumerator each用法及代碼示例
- Ruby Enumerable.any?用法及代碼示例
- Ruby Enumerable min_by()用法及代碼示例
- Ruby Enumerable each_witth_object()用法及代碼示例
- Ruby Enumerable.slice_before用法及代碼示例
- Ruby Enumerable each_cons()用法及代碼示例
- Ruby Enumerable.uniq用法及代碼示例
- Ruby Enumerable uniq()用法及代碼示例
- Ruby Enumerable.find_all用法及代碼示例
- Ruby Enumerable.max用法及代碼示例
- Ruby Enumerable.map用法及代碼示例
注:本文由純淨天空篩選整理自ruby-lang.org大神的英文原創作品 Enumerator.produce。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。