【问题标题】:syncEnumerator equivalent in ruby 1.9.2ruby 1.9.2 中的 syncEnumerator 等效项
【发布时间】:2011-04-03 13:38:15
【问题描述】:

在 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 generator ruby-1.9 ruby-1.9.2


    【解决方案1】:

    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
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2016-04-10
        • 2012-05-14
        • 1970-01-01
        • 2021-06-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-22
        相关资源
        最近更新 更多