Предположим, у меня есть два счетчика, enum1
и enum2
, которые должны быть лениво повторены (потому что у них есть побочные эффекты). Как создать третий счетчик enum3
, где enum3.each{|x| x}
будет lazily вернуть эквивалент enum1 + enum2
?Как я могу сделать рубиновый перечислитель, который выполняет ленивую итерацию через два других счетчика?
В моем истинном случае использования, я транслируюсь в двух файлах, и мне нужно выпустить конкатенацию.
Большое спасибо за решение 'flat_map'. Даже если мы уже проверили ленивость «flat_map», это нам не приходило, чтобы использовать его как ленивое приложение! :) –
Недостатком этого решения является то, что 'concated_enum.size' всегда возвращает' nil'. – skalee
@skalee Я думаю, что это недостаток ленивых перечислений; вы никогда не узнаете, насколько они велики, пока вы не пронеслись через них. Их размер может быть функцией того, как долго вы будете выполнять итерацию. Они могут даже быть бесконечными. –