1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

Describe #eager in the Enumerator::Lazy section

This commit is contained in:
Akinori MUSHA 2019-09-04 16:07:40 +09:00
parent 1d4bd229b8
commit f6da4a5447
No known key found for this signature in database
GPG key ID: C5D7717121727E34

View file

@ -1676,15 +1676,34 @@ lazy_generator_init(VALUE enumerator, VALUE procs)
* *
* # This will fetch all URLs before selecting * # This will fetch all URLs before selecting
* # necessary data * # necessary data
* URLS.map { |u| JSON.parse(open(u).read) }. * URLS.map { |u| JSON.parse(open(u).read) }
* select { |data| data.key?('stats') }. * .select { |data| data.key?('stats') }
* first(5) * .first(5)
* *
* # This will fetch URLs one-by-one, only till * # This will fetch URLs one-by-one, only till
* # there is enough data to satisfy the condition * # there is enough data to satisfy the condition
* URLS.lazy.map { |u| JSON.parse(open(u).read) }. * URLS.lazy.map { |u| JSON.parse(open(u).read) }
* select { |data| data.key?('stats') }. * .select { |data| data.key?('stats') }
* first(5) * .first(5)
*
* Ending a chain with ".eager" generates a non-lazy enumerator, which
* is suitable for returning or passing to another method that expects
* a normal enumerator.
*
* def active_items
* groups
* .lazy
* .flat_map(&:items)
* .reject(&:disabled)
* .eager
* end
*
* # This works lazily; if a checked item is found, it stops
* # iteration and does not look into remaining groups.
* first_checked = active_items.find(&:checked)
*
* # This returns an array of items like a normal enumerator does.
* all_checked = active_items.select(&:checked)
* *
*/ */