If an iteration method such as each
is called without a block, an Enumerator
should be returned.
This can be done using the enum_for
method:
def each
return enum_for :each unless block_given?
yield :x
yield :y
yield :z
end
This enables the programmer to compose Enumerable
operations:
each.drop(2).map(&:upcase).first
# => :Z