From 7e41e2ed0e087f7988ba399f5936aeee649ac231 Mon Sep 17 00:00:00 2001 From: Jun Hiroe Date: Mon, 24 Mar 2014 16:13:27 +0900 Subject: Enumerable#each_with_object --- mrbgems/mruby-enum-ext/mrblib/enum.rb | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) (limited to 'mrbgems/mruby-enum-ext/mrblib/enum.rb') diff --git a/mrbgems/mruby-enum-ext/mrblib/enum.rb b/mrbgems/mruby-enum-ext/mrblib/enum.rb index 885ec26db..02513d1ad 100644 --- a/mrbgems/mruby-enum-ext/mrblib/enum.rb +++ b/mrbgems/mruby-enum-ext/mrblib/enum.rb @@ -475,4 +475,27 @@ module Enumerable count == 1 ? true : false end + + ## + # call-seq: + # enum.each_with_object(obj) { |(*args), memo_obj| ... } -> obj + # enum.each_with_object(obj) -> an_enumerator + # + # Iterates the given block for each element with an arbitrary + # object given, and returns the initially given object. + # + # If no block is given, returns an enumerator. + # + # (1..10).each_with_object([]) { |i, a| a << i*2 } + # #=> [2, 4, 6, 8, 10, 12, 14, 16, 18, 20] + # + + def each_with_object(obj=nil, &block) + raise ArgumentError, "wrong number of arguments (0 for 1)" if obj == nil + + return to_enum :each_with_object unless block_given? + + self.each {|*val| block.call(*val, obj) } + obj + end end -- cgit v1.2.3