スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Tag:スポンサー広告 

【Ruby】injectメソッドについて

injectメソッドについてメモします

例えば

numbers = [1, 2, 3, 4]

というリストがあったとします

このリストに対してinjectメソッドを呼び出してみます

puts numbers.inject(0) { | sum, element |
   sum + element
}

とすると

10が返ってきます

puts numbers.inject(1) { | product, element |
   product * element
}

とすると

24

が返ってきます

これでinjectメソッドの大体の動作はつかめたかと思います

つまり

ブロックの第一引数にメソッドの引数を渡し、第2引数にリストの最初の要素を渡してブロックの中身を実行

ブロックの最後の式の評価をまたブロックの第一引数に渡し、第2引数にリストの次の要素を渡してまた実行

を各要素に対して繰り返すという感じです

さらにこのinjectメソッドを引数なしで呼び出した時の動作を紹介します

また上の例を使い回したいと思います

puts numbers.inject { | sum, element |
   sum + element
}

とすると

やはり

10

が返ってきます

puts numbers.inject { | product, element |
   product * element
}

とすると

やはり

24

が返ってきます

それでは

puts [0, 1, 2, 3, 4].inject { | product, element |
     product * element
}

とするとなにが返ってくるでしょうか?

答えは

0

です

injectメソッドの引数なしのときの動作は

ブロックの第一引数にリストの最初の値を渡し、リストの2番目の要素から順に繰り返し実行して行く(繰り返しの仕方はinjectメソッド引数ありのときと同じ)

ということになります

引数なしでも気を利かせてくれるRubyもすばらしいですが、勘違いしないように動作の違いをしっかり認識しないといけませんね
スポンサーサイト
テーマ : プログラミング
ジャンル : コンピュータ

Tag:Ruby  Trackback:0 comment:0 

プロフィール

6rats

Author:6rats
こんにちは、ITベンチャーで働くエンジニアです
主に自分の周りで起きた技術的なことをメモとして書き残して行きます。
Android以外にもRuby/Ruby on RailsやFuelPHPなどなどたまにやります。基本的なスタンスとしては興味があるもしくは必要になったらいろんなことにチャレンジします。
最近はiOSアプリ開発を始めています。

購読
follow us in feedly
個人プロダクト

Androidアプリ

Twitterクライアント

Webアプリケーション

EcPriceWatch(Amazon価格の推移を計測、最安値を知らせるサービス)
Google AdSense
ブログ村
にほんブログ村 IT技術ブログへ
にほんブログ村
ブロとも申請フォーム

この人とブロともになる

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。