Array#mapを調べた
ruby 1.9.3p0 (2011-10-30 revision 33570) [x86_64-darwin11.3.0]
eachと何が違うのかわからないし、mapって普段使わないのでちょっと調べてみた。
mapというのは、『(レシーバの)配列の"各要素"をブロックの中の最後の値に置き換える』と認識した。
配列のメソッドだけあって、各要素をブロック変数に書き出す動きはeachと同じ。
違うのはブロックの最後の値を取り出した要素に戻していること。
eachだと、各要素から取り出しっぱなし。(のはず。)
"!"が付くと破壊的メソッド。レシーバの中身を上書きする。
例1
arr = %w(age haaaoge foo poyo) arr.map!{ | v | v + "hoge" } p arr
結果
["agehoge", "haaaogehoge", "foohoge", "poyohoge"]
すごくわかりにくいし翌日には理解できないかもしれない。
わかりにくいところは代入していないのに"hoge"が付加されているところだと思う。見慣れない。
例3
arr.map! do | v | puts "nemui" nil end p arr