Method: Array#reverse_each
- Defined in:
- array.c
#reverse_each {|element| ... } ⇒ self #reverse_each ⇒ Enumerator
Iterates backwards over array elements.
When a block given, passes, in reverse order, each element to the block; returns self
:
a = [:foo, 'bar', 2]
a.reverse_each {|element| puts "#{element.class} #{element}" }
Output:
Integer 2
String
Symbol foo
Allows the array to be modified during iteration:
a = [:foo, 'bar', 2]
a.reverse_each {|element| puts element; a.clear if element.to_s.start_with?('b') }
Output:
2
When no block given, returns a new Enumerator:
a = [:foo, 'bar', 2]
e = a.reverse_each
e # => #<Enumerator: [:foo, "bar", 2]:reverse_each>
a1 = e.each {|element| puts "#{element.class} #{element}" }
Output:
Integer 2
String
Symbol foo
Related: #each, #each_index.
2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 |
# File 'array.c', line 2617
static VALUE
rb_ary_reverse_each(VALUE ary)
{
long len;
RETURN_SIZED_ENUMERATOR(ary, 0, 0, ary_enum_length);
len = RARRAY_LEN(ary);
while (len--) {
long nlen;
rb_yield(RARRAY_AREF(ary, len));
nlen = RARRAY_LEN(ary);
if (nlen < len) {
len = nlen;
}
}
return ary;
}
|