それで、sumはどこからでてくるのかというと、injectの引数。sumはこのinjectの引数(この場合は0)を受ける。injectはブロックをとるので、その中で処理を書く。・・・43に2を足して45という感じ。各要素に対して繰り返し同じ処理をしたいときに使える。引数を二つとってこんな書き方もできる。:+)一つ目の引数は初期値。二つ目の引数はメソッド名。Rubyはメソッドをシンボルにして呼び出すことが良くある。public_sendなんかはその最たる例であろう。"class4"}]このような配列があったとする。hrefやtagがnilのない配列を作りたいとする。いうときは、each_with_objectを使ってこのように書くことができる。tag[:tag].nil?end結果はこちら。:style=>"class4"}]each_with_objectではブロックの第2引数の処理結果が返り値となる。今回の場合だと、arrayという変数だ。初期値は[]で空の配列。次のように書くのと同じ動きをする。:style=>"class4"}]こんな感じだ。このやり方だと変数を初期化してループでぐるぐるまわすというのがいかにもrubyっぽくない。そこでeach_with_objectの登場というわけだ。reduceで書くこともできる。arrayendただし、reduceの場合、ブロックの最後にarrayを返さないといけない。doのあとの引数もeach_with_objectとはちょっと違うの注意が必要だ。Rubyを読んでみた。(2)プロフィール東大を卒業し、SEとして働くことになった。備忘録的に作業を綴る。読者になるリンクはてなブログブログをはじめる週刊はてなブログはてなブログPro月別アーカイブ参加グループプログラミングMathJaxはてなブログをはじめよう!smartenergyさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。