From: Stefan Lang Date: 2008-03-08T05:33:58+09:00 Subject: Re: ActiveSupport Enumerable#sum should not use #size 2008/3/7, Trans : > ActiveSupport defines this for Enumerable#sum: > > module Enumerable > > def sum(identity = 0, &block) > return identity unless size > 0 > > if block_given? > map(&block).sum > else > inject { |sum, element| sum + element } > end > end > > end > > The use of #size shouldn't be used in an Enumerable method --since it > is not part of Enumerable's defined interface..... Ah, I was just > about to ask what anyone thought the fix to this is, but it occurs to > me that it might be: > > def sum(identity = 0, &block) > if block_given? > map(&block).sum > else > inject { |sum, element| sum + element } || identity inject takes the identity as first parameter: inject(identity) { |sum, element| sum + element } and since they define Symbol#to_proc, this can even be inject(identity, &:+) > end > end > > Look right? > > > T. Stefan