summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--mrbgems/mruby-array-ext/mrblib/array.rb10
-rw-r--r--mrbgems/mruby-enum-ext/mrblib/enum.rb4
2 files changed, 12 insertions, 2 deletions
diff --git a/mrbgems/mruby-array-ext/mrblib/array.rb b/mrbgems/mruby-array-ext/mrblib/array.rb
index 337cef632..feec10ead 100644
--- a/mrbgems/mruby-array-ext/mrblib/array.rb
+++ b/mrbgems/mruby-array-ext/mrblib/array.rb
@@ -201,4 +201,14 @@ class Array
self.replace(result)
end
end
+
+ # for efficiency
+ def reverse_each(&block)
+ i = self.size - 1
+ while i>=0
+ block.call(self[i])
+ i -= 1
+ end
+ self
+ end
end
diff --git a/mrbgems/mruby-enum-ext/mrblib/enum.rb b/mrbgems/mruby-enum-ext/mrblib/enum.rb
index 6ac1812ee..0ce1d7605 100644
--- a/mrbgems/mruby-enum-ext/mrblib/enum.rb
+++ b/mrbgems/mruby-enum-ext/mrblib/enum.rb
@@ -519,8 +519,8 @@ module Enumerable
def reverse_each(&block)
ary = []
- self.each {|*val| ary.unshift(*val) }
- ary.each {|*val| block.call(*val) }
+ self.each {|*val| ary.push(val.__svalue) }
+ ary.reverse_each(&block)
self
end
end