diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2014-03-17 00:53:08 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2014-03-17 00:53:08 +0900 |
| commit | 027d6407cc7c90324173799ade724aa6860206d0 (patch) | |
| tree | d2518d395d1e851b0be4a2d450f752a7aeefd0bd /mrblib/enum.rb | |
| parent | ed2fe640767ca8852ebae91285d1b5091ecf2556 (diff) | |
| download | mruby-027d6407cc7c90324173799ade724aa6860206d0.tar.gz mruby-027d6407cc7c90324173799ade724aa6860206d0.zip | |
make Enumerable methods to support multiple values; collect, detect, each_with_index, find_all, inject, max, min, partition, reject, sort
Diffstat (limited to 'mrblib/enum.rb')
| -rw-r--r-- | mrblib/enum.rb | 45 |
1 files changed, 24 insertions, 21 deletions
diff --git a/mrblib/enum.rb b/mrblib/enum.rb index 1e78e39cc..30ccc8c19 100644 --- a/mrblib/enum.rb +++ b/mrblib/enum.rb @@ -81,8 +81,8 @@ module Enumerable return to_enum :collect unless block_given? ary = [] - self.each{|val| - ary.push(block.call(val)) + self.each{|*val| + ary.push(block.call(*val)) } ary end @@ -97,9 +97,9 @@ module Enumerable # ISO 15.3.2.2.4 def detect(ifnone=nil, &block) ret = ifnone - self.each{|val| - if block.call(val) - ret = val + self.each{|*val| + if block.call(*val) + ret = val.__svalue break end } @@ -115,8 +115,8 @@ module Enumerable # ISO 15.3.2.2.5 def each_with_index(&block) i = 0 - self.each{|val| - block.call(val, i) + self.each{|*val| + block.call(val.__svalue, i) i += 1 } self @@ -130,8 +130,8 @@ module Enumerable def entries ary = [] self.each{|*val| - # __to_svalue is an internal method - ary.push val.__to_svalue + # __svalue is an internal method + ary.push val.__svalue } ary end @@ -151,8 +151,8 @@ module Enumerable # ISO 15.3.2.2.8 def find_all(&block) ary = [] - self.each{|val| - ary.push(val) if block.call(val) + self.each{|*val| + ary.push(val.__svalue) if block.call(*val) } ary end @@ -215,7 +215,8 @@ module Enumerable flag = false result = args[0] end - self.each{|val| + self.each{|*val| + val = val.__svalue if flag # push first element as initial flag = false @@ -244,7 +245,8 @@ module Enumerable def max(&block) flag = true # 1st element? result = nil - self.each{|val| + self.each{|*val| + val = val.__svalue if flag # 1st element result = val @@ -270,7 +272,8 @@ module Enumerable def min(&block) flag = true # 1st element? result = nil - self.each{|val| + self.each{|*val| + val = val.__svalue if flag # 1st element result = val @@ -305,11 +308,11 @@ module Enumerable def partition(&block) ary_T = [] ary_F = [] - self.each{|val| - if block.call(val) - ary_T.push(val) + self.each{|*val| + if block.call(*val) + ary_T.push(val.__svalue) else - ary_F.push(val) + ary_F.push(val.__svalue) end } [ary_T, ary_F] @@ -324,8 +327,8 @@ module Enumerable # ISO 15.3.2.2.17 def reject(&block) ary = [] - self.each{|val| - ary.push(val) unless block.call(val) + self.each{|*val| + ary.push(val.__svalue) unless block.call(*val) } ary end @@ -386,7 +389,7 @@ module Enumerable # ISO 15.3.2.2.19 def sort(&block) ary = [] - self.each{|val| ary.push(val)} + self.each{|*val| ary.push(val.__svalue)} unless ary.empty? __sort_sub__(ary, ::Array.new(ary.size), 0, 0, ary.size - 1, &block) end |
