inject
class Array def sum() inject{|x,i| x+i } end end def f(n) n % 7 end def g(n) # 3*f((1..7).inject{|x,k| x+k**n}) 3*f((1..7).map{|k| k**n}.sum) end p f(10) #=> 3 p g(6) #=> 18
injectがいるのが気持ち悪く感じる体になってしまった.合計を求めるのに中間変数を見たくない.
とはいえ,これはさすがにやりすぎだと感じる.
class Array def sum(nodata=nil) return nodata if empty? return self[0] if size==1 self[0] + self[1..-1].sum end end p [1,2,3,4].sum(0) #=> 10