こんなinjectはいかが
思い立ったら即行動と言うか,さっさとレポート書けよ!とか思うのですが,無性にinjectが書きたくなるお年頃なのです多分.
こんなん書いてみました.
class Array def myinject(r, b) result = r self.each do |e| result = b.call(result,e) end return result end end b = lambda do |r, e| r += e end p (1 .. 10).to_a.myinject(0, b) p (1 .. 20).to_a.myinject(0, b) => $ ruby inject.rb 55 210
一度ブロックをlambdaで作っちゃうと,色んな配列に同じブロックでinjectが出来ちゃうと言う,優れては居ないけどDRYな感じがするmyinject.一度lambdaで定義しなきゃ駄目と言う面倒くさい仕様だけど,空気を読んでくれる人ならこういう使い方をしてくれると信じて.
irb(main):002:0> (1..10).to_a.myinject 1.0, lambda{|r, e| r /= e} => 2.75573192239859e-07