diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2014-03-24 18:39:06 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2014-03-24 18:39:06 +0900 |
| commit | c326ab877e8e9d04b672d14b37c7d5fa96d04e7b (patch) | |
| tree | b30c9487e551457f1a311d8672820bf7069b7469 | |
| parent | 23610d548956cc2ba92fada791ac1de1b1026192 (diff) | |
| download | mruby-c326ab877e8e9d04b672d14b37c7d5fa96d04e7b.tar.gz mruby-c326ab877e8e9d04b672d14b37c7d5fa96d04e7b.zip | |
improve Enumerable#reverse_each to be efficient
| -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 |
