Нещодавно патч Enumerator::Lazy був прийнятий в ruby trunk. А це значить що в Ruby 2.0 ми зможемо:
a = [1,2,3,4,2,5].lazy.map { |x| x * 10 }.select { |x| x > 30 } #=> обчислення не відбувається
a.to_a #=> [40, 50], об'єкт обчислюється за один прохід
Зараз Enumerator::Lazy має в своєму арсеналі select, map, reject, grep, flat_map, zip, take, take_while, drop, drop_while, cycle. Розробка активно продовжується. Якщо хочете використовувати його прямо зараз - досить скомпілювати Ruby з trunk і насолоджуватися.
Докладніше про Enumerator::Lazy: англійською і російською.
Немає коментарів:
Дописати коментар