2
マイケル・ハリソンは、lazy enumerators in Rubyに関する素晴らしい投稿をしており、lazy_select
とlazy_map
の実装を提供しています。 lazy_flatten
の次の実装でEnumerator
とEnumerable
タイプ以外の特殊処理が必要かどうかは疑問です。あなたはまだ下に古い(非遅延)flatten
を実行しているようRuby列挙型ベースの遅延平坦化メソッド
class Enumerator
def lazy_flatten
Enumerator.new do |yielder|
self.each do |value|
if value.kind_of? Enumerator
value.lazy_flatten.each do |v|
yielder.yield v
end
elsif value.kind_of? Enumerable
value.flatten.each do |v|
yielder.yield v
end
else
yielder.yield value
end
end
end
end
end