diff options
| author | Jun Hiroe <[email protected]> | 2014-03-24 17:49:14 +0900 |
|---|---|---|
| committer | Jun Hiroe <[email protected]> | 2014-03-24 18:03:37 +0900 |
| commit | 70bbe9a894eabce6409b6e13c88b9a051bca20f7 (patch) | |
| tree | 00b5b4089f55da324dc68767e7e6c0f876de52ab /mrbgems/mruby-enum-ext | |
| parent | 2ce232144b5d3eacd9c3755306ee12cd28748dcf (diff) | |
| download | mruby-70bbe9a894eabce6409b6e13c88b9a051bca20f7.tar.gz mruby-70bbe9a894eabce6409b6e13c88b9a051bca20f7.zip | |
Add Enumerable#reverse_each
Diffstat (limited to 'mrbgems/mruby-enum-ext')
| -rw-r--r-- | mrbgems/mruby-enum-ext/mrblib/enum.rb | 25 | ||||
| -rw-r--r-- | mrbgems/mruby-enum-ext/test/enum.rb | 7 |
2 files changed, 32 insertions, 0 deletions
diff --git a/mrbgems/mruby-enum-ext/mrblib/enum.rb b/mrbgems/mruby-enum-ext/mrblib/enum.rb index c3e1b2501..6ac1812ee 100644 --- a/mrbgems/mruby-enum-ext/mrblib/enum.rb +++ b/mrbgems/mruby-enum-ext/mrblib/enum.rb @@ -498,4 +498,29 @@ module Enumerable self.each {|*val| block.call(val.__svalue, obj) } obj end + + ## + # call-seq: + # enum.reverse_each { |item| block } -> enum + # enum.reverse_each -> an_enumerator + # + # Builds a temporary array and traverses that array in reverse order. + # + # If no block is given, an enumerator is returned instead. + # + # (1..3).reverse_each { |v| p v } + # + # produces: + # + # 3 + # 2 + # 1 + # + + def reverse_each(&block) + ary = [] + self.each {|*val| ary.unshift(*val) } + ary.each {|*val| block.call(*val) } + self + end end diff --git a/mrbgems/mruby-enum-ext/test/enum.rb b/mrbgems/mruby-enum-ext/test/enum.rb index ae5482008..127b263fb 100644 --- a/mrbgems/mruby-enum-ext/test/enum.rb +++ b/mrbgems/mruby-enum-ext/test/enum.rb @@ -115,3 +115,10 @@ assert("Enumerable#each_with_object") do assert_true [2, 4, 6, 8, 10, 12, 14, 16, 18, 20], (1..10).each_with_object([]) { |i, a| a << i*2 } assert_raise(ArgumentError) { (1..10).each_with_object() { |i, a| a << i*2 } } end + +assert("Enumerable#reverse_each") do + r = (1..3) + a = [] + assert_equal (1..3), r.reverse_each { |v| a << v } + assert_equal [3, 2, 1], a +end |
