Ruby 4.0 リファレンスマニュアル

instance method Range#reverse_each

reverse_each -> EnumeratorRuby 3.3 から[permalink][rdoc][edit]
reverse_each {|element| ... } -> self

逆順に各要素に対してブロックを評価します。

内部で各要素を保持した配列を作ります。ただし、端点が Integer である場合は、配列を作らないように最適化が行われています。

始端を持たない範囲(beginless range)であっても、終端が Integer であれば、終端から下降しながら反復できます。この場合は要素が無限に生成されるため、 firsttake で打ち切るか、ブロック内で break してください。

ブロックを省略した場合は、各要素を逆順に辿る Enumerator を返します。

[EXCEPTION] TypeError:
終端を持たない範囲オブジェクトに対してこのメソッドを呼んだ場合に発生します。
p (1..3).reverse_each # => #<Enumerator: ...>
(1..3).reverse_each { |v| p v }
# => 3
#    2
#    1
# 始端を持たない範囲は終端から下降しながら反復する(無限に生成される)
p (..5).reverse_each.first(3) # => [5, 4, 3]

(1..).reverse_each { |v| p v } # raises: TypeError: can't iterate from NilClass