ruby injectの第一引数のデフォルト値は配列の先頭の値になるため、平方和などを計算するときは初期値を明示指定する必要がある.
ruby injectの第一引数を指定した場合と指定しない場合では、配列走査の動きが異なるので、平方和などを計算するときは初期値を明示指定する必要がある.
http://docs.ruby-lang.org/ja/2.1.0/class/Enumerable.html#I_INJECT
総和の場合は問題ない
[1,2,3].inject {|sum,n| sum+n }
# => 6
[3,2,1].inject {|sum,n| sum+n }
# => 6
平方和の場合は問題あり
[1,2,3].inject {|sum,n| sum+n*n }
# => 14
[3,2,1].inject {|sum,n| sum+n*n }
# => 8
和の計算などで使う場合は初期値0を指定する
[1,2,3].inject(0) {|sum,n| sum+n }
# => 6
[1,2,3].inject(0) {|sum,n| sum+n*n }
# => 14
[3,2,1].inject(0) {|sum,n| sum+n }
# => 6
[3,2,1].inject(0) {|sum,n| sum+n*n }
# => 14
Environment
% uname -a
Linux *** 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
% ruby -v
ruby 2.1.1p76 (2014-02-24 revision 45161) [x86_64-linux]
% cat /etc/issue
CentOS release 6.5 (Final)
Kernel \r on an \m