在 ruby 1.8.x 中,我们像这样迭代多个枚举:
require 'generator'
syncEnum = SyncEnumerator.new(enum1, enum2)
syncEnum.each { |x;y| puts "#{x},#{y}" }
但是生成器已经从 Ruby 1.9.x 中移除,如何在 Ruby 1.9.x 中迭代多个枚举器?
谢谢
在 ruby 1.8.x 中,我们像这样迭代多个枚举:
require 'generator'
syncEnum = SyncEnumerator.new(enum1, enum2)
syncEnum.each { |x;y| puts "#{x},#{y}" }
但是生成器已经从 Ruby 1.9.x 中移除,如何在 Ruby 1.9.x 中迭代多个枚举器?
谢谢
SyncEnumerator
似乎已移至REXML
模块:
require 'rexml/syncenumerator'
a = [1,2,3]
b = [4,5,6]
e = REXML::SyncEnumerator.new(a, b)
e.each{|i,j| p [i, j]}
#=> [1, 4]
#=> [2, 5]
#=> [3, 6]
顺便说一句,只是为了练习,这是一个幼稚的实现:
def sync_enum *enums
enums.map!(&:to_enum)
Enumerator.new do |yielder|
loop do
yielder.yield(enums.map(&:next))
end
end
end
为此,我使用Zucker gem 。它用有用的语法糖扩展了 Ruby。
require 'zucker/control'
a = [1,2,3]
b = [4,5,6]
iterate(a, b) { |i,j| p [i, j] }
#=> [1, 4]
#=> [2, 5]
#=> [3, 6]