summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAkinori MUSHA <knu@idaemons.org>2019-09-04 16:07:40 +0900
committerAkinori MUSHA <knu@idaemons.org>2019-09-04 16:16:47 +0900
commitf6da4a544760e00d932fea9a586bd869e82ad339 (patch)
treebc74f377ae97a7efde0cc654f4fb9351ced7d04c
parent1d4bd229b898671328c2a942b04f08065c640c28 (diff)
Describe #eager in the Enumerator::Lazy section
-rw-r--r--enumerator.c31
1 files changed, 25 insertions, 6 deletions
diff --git a/enumerator.c b/enumerator.c
index 7a0a17b52f..a8d14bb98b 100644
--- a/enumerator.c
+++ b/enumerator.c
@@ -1676,15 +1676,34 @@ lazy_generator_init(VALUE enumerator, VALUE procs)
*
* # This will fetch all URLs before selecting
* # necessary data
- * URLS.map { |u| JSON.parse(open(u).read) }.
- * select { |data| data.key?('stats') }.
- * first(5)
+ * URLS.map { |u| JSON.parse(open(u).read) }
+ * .select { |data| data.key?('stats') }
+ * .first(5)
*
* # This will fetch URLs one-by-one, only till
* # there is enough data to satisfy the condition
- * URLS.lazy.map { |u| JSON.parse(open(u).read) }.
- * select { |data| data.key?('stats') }.
- * first(5)
+ * URLS.lazy.map { |u| JSON.parse(open(u).read) }
+ * .select { |data| data.key?('stats') }
+ * .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)
*
*/