diff options
| -rw-r--r-- | mrbgems/mruby-array-ext/mrblib/array.rb | 10 | ||||
| -rw-r--r-- | mrbgems/mruby-enum-ext/mrblib/enum.rb | 4 |
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 |
