假设我有两个枚举器,enum1
and enum2
必须延迟迭代(因为它们有副作用)。如何构造第三个枚举器enum3
where enum3.each{|x| x}
would lazily返回相当于enum1 + enum2
?
在我的现实用例中,我正在流式传输两个文件,并且需要流式传输连接。
这似乎正是我想要的;
enums.lazy.flat_map{|enum| enum.lazy }
这是演示。定义这些产生副作用的方法;
def test_enum
return enum_for __method__ unless block_given?
puts 'hi'
yield 1
puts 'hi again'
yield 2
end
def test_enum2
return enum_for __method__ unless block_given?
puts :a
yield :a
puts :b
yield :b
end
concated_enum = [test_enum, test_enum2].lazy.flat_map{|en| en.lazy }
然后对结果调用 next,表明副作用是延迟发生的;
[5] pry(main)> concated_enum.next
hi
=> 1
[6] pry(main)> concated_enum.next
hi again
=> 2
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)