Ruby 2.7 has added Enumerator#produce to generate Enumerator from any custom data-transformation.

#### Before

Let’s say we want to print the first 10 numbers of fibonacci series.

The code to achieve this would look like:

As shown above, we need to use loop and yield in order to achieve the required results.

#### Enumerator#produce

We can now use Enumerator#produce in Ruby 2.7 to achieve this in a simpler way:

Enumerator.produce(initial, &block), will produce an infinite sequence where each next element is calculated by applying block to previous.

initial is the first sequence element. We can use produce without initial value as well.

Enumerator.produce(&block), will produce an infinite sequence. The first element of the sequence will be the result of calling the block with no args.

Example of produce without args:

As illustrated above, produce helps to produce enumerators with a much cleaner and simpler code.