タグ

Rubyとinjectに関するni66lingのブックマーク (3)

  • injectとeach_with_objectって何が違うのさ? - Qiita

    injectとeach_with_objectの違いが分からない。 どちらもEnumerableなオブジェクトの要素を使って何かしらのオブジェクトを得る。 でもやっぱり違いがあったのでメモ。 イメージで説明 injectは、各要素が力を合わせて一つのオブジェクトを作る each_with_objectは、ターゲットとなるオブジェクトに対して、各要素を作用させる 挙動で説明 配列の各要素を2乗する処理を書く。表面上は同じ挙動をする。 でもdoの後のresultは、同じresultでも意味合いが違っていて、 injectの場合はresultにはブロック内で最後に評価した値が入る each_with_objectの場合は、resultは常にeach_with_objectの引数として渡されたオブジェクトを指す # inject [1, 2, 3].inject [] do |result, i|

    injectとeach_with_objectって何が違うのさ? - Qiita
  • RubyのSymbol#to_procを考えた人になってみる

    Rubyのメソッドはブロックを取れる。ブロックはコードの塊だから、その内容に応じてメソッドの挙動を大きく変化させることができるんだ。 例えば、injectメソッドはリストタイプのオブジェクトに対して、たたみこみ演算を実行するものだけれど、これに加算を行うコードブロックを渡せばinjectメソッドはたたみこみ加算器となり、

  • ruby の inject をわかりやすく説明してみる - Λάδι Βιώσας

    ruby の inject って慣れないと少し理解しづらいよなーと思ったので、極力わかりやすい説明をしてみるテスト。 わかりやすいかもしれない説明 さて、1 から 10 までの合計を求めるこんな↓コードがあった場合 sum = 0 (1..10).each {|i| sum = sum + i } p sum # => 55 inject を使ってこのよう↓に書けます。 p (1..10).inject(0) {|sum, i| sum + i } each と inject でどのように書き変わってるかを図で示すとこんな↓感じ。 injectの引数 0 は、ブロックローカルな sum 変数の初期値になってます。で、ブロックの実行結果の値が sum に代入されて、2回目以降のループを実行します。ループしている間の、各変数とブロックの中身はこんな↓感じ。 sum i ブロックの中身(sum

    ruby の inject をわかりやすく説明してみる - Λάδι Βιώσας
  • 1