ruby 1.9.2中的syncEnumerator等效项

时间:2011-04-03 13:38:15

标签: ruby generator ruby-1.9 ruby-1.9.2

在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中使用多个枚举器?

由于

2 个答案:

答案 0 :(得分:3)

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]
BTW,仅仅是为了练习,这是一个天真的实现:

def sync_enum *enums
  enums.map!(&:to_enum)
  Enumerator.new do |yielder|
    loop do
      yielder.yield(enums.map(&:next))
    end
  end
end

答案 1 :(得分:0)

我为此目的使用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]