summaryrefslogtreecommitdiffhomepage
path: root/mrblib/enum.rb
diff options
context:
space:
mode:
authorDaniel Bovensiepen <[email protected]>2012-11-01 16:12:57 +0800
committerDaniel Bovensiepen <[email protected]>2012-11-01 16:12:57 +0800
commitcdb72a05a294eb8521dd40c011160228496312cb (patch)
tree283586ad23f2dc6dfd1fd1aaa354f18c23d8c0d6 /mrblib/enum.rb
parent88dfaf19aa0808f78d13133d61ea433d043923f9 (diff)
parent57910ca5353e1feba1fb069a876b84a52f33d39f (diff)
downloadmruby-cdb72a05a294eb8521dd40c011160228496312cb.tar.gz
mruby-cdb72a05a294eb8521dd40c011160228496312cb.zip
Merge remote-tracking branch 'upstream/master' into mrbgems
Diffstat (limited to 'mrblib/enum.rb')
-rw-r--r--mrblib/enum.rb19
1 files changed, 15 insertions, 4 deletions
diff --git a/mrblib/enum.rb b/mrblib/enum.rb
index 2699a18af..2774bc856 100644
--- a/mrblib/enum.rb
+++ b/mrblib/enum.rb
@@ -200,19 +200,30 @@ module Enumerable
# ISO 15.3.2.2.11
def inject(*args, &block)
raise ArgumentError, "too many arguments" if args.size > 2
- flag = true # 1st element?
- result = nil
+ if Symbol === args[-1]
+ sym = args[-1]
+ block = ->(x,y){x.send(sym,y)}
+ args.pop
+ end
+ if args.empty?
+ flag = true # no initial argument
+ result = nil
+ else
+ flag = false
+ result = args[0]
+ end
self.each{|val|
if flag
- # 1st element
- result = (args.empty?)? val: block.call(args[0], val)
+ # push first element as initial
flag = false
+ result = val
else
result = block.call(result, val)
end
}
result
end
+ alias reduce inject
##
# Alias for collect