ruby – 将几个Enumerables合而为一
发布时间:2020-12-17 01:24:44 所属栏目:百科 来源:网络整理
导读:有没有办法让几个Enumerable对象显示为单个Enumerable而不将其展平为一个数组?目前我写了一个类似的课程,但我觉得必须有一个内置的解决方案. class Enumerables include Enumerable def initialize @enums = [] end def (enum) @enums enum end def each(bl
有没有办法让几个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,4,5,6,7] (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |