class Array
def find_index_r(&block)
Enumerator.new do |yielder|
each_with_index do |item, idx|
yielder.yield(idx) if block.call(item)
end
end
end
end
ary = [1,2,3,4,5,6]
e = ary.find_index_r{|r| r % 2 == 0}
p e.to_a
#=> [1, 3, 5]
# Modify the array
ary << 8
# We need to rewind as enumerator is not consistent with array
e.rewind
p e.to_a
#=>[1, 3, 5, 6]
Y2xhc3MgQXJyYXkKICBkZWYgZmluZF9pbmRleF9yKCZibG9jaykKICAgIEVudW1lcmF0b3IubmV3IGRvIHx5aWVsZGVyfAogICAgICBlYWNoX3dpdGhfaW5kZXggZG8gfGl0ZW0sIGlkeHwKICAgICAgICB5aWVsZGVyLnlpZWxkKGlkeCkgaWYgYmxvY2suY2FsbChpdGVtKQogICAgICBlbmQKICAgIGVuZAogIGVuZAplbmQKCmFyeSA9IFsxLDIsMyw0LDUsNl0KCmUgPSBhcnkuZmluZF9pbmRleF9ye3xyfCByICUgMiA9PSAwfQpwIGUudG9fYQojPT4gWzEsIDMsIDVdCgojIE1vZGlmeSB0aGUgYXJyYXkKYXJ5IDw8IDgKIyBXZSBuZWVkIHRvIHJld2luZCBhcyBlbnVtZXJhdG9yIGlzIG5vdCBjb25zaXN0ZW50IHdpdGggYXJyYXkKZS5yZXdpbmQKCnAgZS50b19hCiM9PlsxLCAzLCA1LCA2XQ==