运维开发网
广告位招商联系QQ:123077622
 
广告位招商联系QQ:123077622

ruby – 将几个Enumerables合而为一

运维开发网 https://www.qedev.com 2020-08-13 10:16 出处:网络 作者:运维开发网整理
有没有办法让几个Enumerable对象显示为单个Enumerable而不将其展平为一个数组?目前我写了一个类似的课程,但我觉得必须有一个内置的解决方案. class Enumerables include Enumerable def initialize @enums = [] end def <<(enum) @enums << enum end
有没有办法让几个Enumerable对象显示为单个Enumerable而不将其展平为一个数组?目前我写了一个类似的课程,但我觉得必须有一个内置的解决方案.

class Enumerables
  include Enumerable

  def initialize
    @enums = []
  end

  def <<(enum)
    @enums << enum
  end

  def each(&block)
    if block_given?
      @enums.each { |enum|
        puts "Enumerating #{enum}"
        enum.each(&block)
      }
    else
      to_enum(:each)
    end
  end
end

enums = Enumerables.new
enums << 1.upto(3)
enums << 5.upto(8)
enums.each { |s| puts s }

举个简单的例子,它需要能够像这样接受一个无限的枚举器.

inf = Enumerator.new { |y| a = 1; loop { y << a; a +=1 } };
毕竟.在元素上使用带有.each.lazy的 Enumerable::Lazy#flat_map

inf = Enumerator.new { |y| a = 1; loop { y << a; a += 1 } }
[(1..3).to_a, inf].lazy.flat_map { |e| e.each.lazy }.take(10).force
#⇒ [1, 2, 3, 1, 2, 3, 4, 5, 6, 7]

扫码领视频副本.gif

0

精彩评论

暂无评论...
验证码 换一张
取 消