こんな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