1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

Optional identity for Enumerable#sum defaults to zero. Closes #5657.

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@4599 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
This commit is contained in:
Jeremy Kemper 2006-07-09 20:48:31 +00:00
parent 1dc4cc030f
commit 5241b97709
3 changed files with 17 additions and 2 deletions

View file

@ -1,5 +1,7 @@
*SVN*
* Optional identity for Enumerable#sum defaults to zero. #5657 [gensym@mac.com]
* HashWithIndifferentAccess shouldn't confuse false and nil. #5601 [shugo@ruby-lang.org]
* Fixed HashWithIndifferentAccess#default #5586 [chris@seagul.co.uk]

View file

@ -30,7 +30,14 @@ module Enumerable #:nodoc:
#
# Also calculates sums without the use of a block:
# [5, 15, 10].sum # => 30
def sum(&block)
#
# The default identity (sum of an empty list) is zero.
# However, you can override this default:
#
# [].sum(Payment.new(0)) { |i| i.amount } # => Payment.new(0)
#
def sum(identity = 0, &block)
return identity unless size > 0
if block_given?
map(&block).sum
else

View file

@ -44,7 +44,13 @@ class EnumerableTests < Test::Unit::TestCase
assert_raise(TypeError) { payments.sum(&:price) }
assert_equal 60, payments.sum { |p| p.price.to_i * 2 }
end
def test_empty_sums
assert_equal 0, [].sum
assert_equal 0, [].sum { |i| i }
assert_equal Payment.new(0), [].sum(Payment.new(0))
end
def test_index_by
payments = [ Payment.new(5), Payment.new(15), Payment.new(10) ]
assert_equal(