有没有办法让几个Enumerable对象显示为单个Enumerable而不将其展平为一个数组?目前我写了一个类似的课程,但我觉得必须有一个内置的解决方案. class Enumerables include Enumerable def initialize
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]