Issue #16987 has been updated by midnight (Sarun R).


I used Lazy all the time. There is nothing to be done here about its popularity.
FWIW, People knew about it, but choose not to rely on it because they want to support old versions of Ruby.
Hence, it is not very popular in open-source settings.


Regardless of what should be implemented, for now, you can use
~~~ ruby
lazy.flat_map(&:itself)
~~~
as `#flatten`, and
~~~ ruby
lazy.select(&:itself)
~~~
as `#compact`.

Only `#product` is the tricky one that requires multiple operations, but it is not used very often anyway.

What I missed most is `#scan`.
https://ramdajs.com/docs/#scan
It is basically a `#reduce` that yield at every iteration.

----------------------------------------
Feature #16987: Enumerator::Lazy vs Array methods
https://bugs.ruby-lang.org/issues/16987#change-86561

* Author: zverok (Victor Shepelev)
* Status: Open
* Priority: Normal
----------------------------------------
Enumerations are designed to be greedy (immediately executed on each method call within a chain) by default. Sometimes, that is not useful for practical purposes (e.g. 2 mln strings array, drop comments, split into fields, find the first ten whose field 2 is equal to some value). So one needs to either do everything in one `each` block, or use `Enumerable#lazy`. There are three problems with the latter:

1. It is much less known,
2. It is said to be _almost always_ slower than non-lazy, and is therefore not recommended,
3. It lacks some methods that are often necessary in processing large data chunks.

I want to discuss (3) here. `Enumerator::Lazy` would better, but actually doesn't, have methods such as: `#flatten`, `#product`, and `#compact`. They are all methods of Array, not Enumerable. In fact,
 
1. They probably _should_ belong to `Enumerable` (none of them requires anything besides `#each` to function),
2. They are definitely useful for lazily processing large sequences.



-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>