知らない人(というかチョット前の自分)はこんなふうに書いてるはず。
i = 0 goldsaints.each do |goldsaint| # ここは第2の宮 そしておれはカプリコーンのアルデバランだ のようなメッセージを出力する p 'ここは第' + (i + 1).to_s + 'の宮 そしておれは' + goldsaint.asterism + 'の' + goldsain.name + 'だ' # (エレガントでない)インデックスインクリメント i++ end
しかしいつものことだけど、『外側でローカル変数を宣言して中でインクリメントして…』的なやり方は実にださい、しかしeachはベンリなので使いたい、とかいう流れになる。
# javaでも拡張forループはベンリだけどindexが必要になる場合は普通のforループとか使ってた。
で『rubyならそのへん上手くやってくれるんじゃない?』と思い先生に『ruby each index』とか聞いてみたところ、『each_with_index』なるメソッドがあるらしい。
うむ、コレを使えばブロックの変数宣言のところで
|element, i| 的にして中でiが使えるらしい。
となるとさっきのコードは
ちょっとエレガントになった、しめしめ。
# javaでも拡張forループはベンリだけどindexが必要になる場合は普通のforループとか使ってた。
で『rubyならそのへん上手くやってくれるんじゃない?』と思い先生に『ruby each index』とか聞いてみたところ、『each_with_index』なるメソッドがあるらしい。
うむ、コレを使えばブロックの変数宣言のところで
|element, i| 的にして中でiが使えるらしい。
となるとさっきのコードは
goldsaints.each_with_index do |goldsaint, i| # ここは第2の宮 そしておれはカプリコーンのアルデバランだ のようなメッセージを出力する p 'ここは第' + (i + 1).to_s + 'の宮 そしておれは' + goldsaint.asterism + 'の' + goldsain.name + 'だ' endとなる。
ちょっとエレガントになった、しめしめ。
0 件のコメント:
コメントを投稿