mapをインデックス付きで使いたい!と思ってRuby1.8.7でRuby1.9ライクな書き方をしようとしたら失敗した。 Rubyでは内部イテレータが使われている。 [1,2,3].each { |n| print n } イテレータにインデックスを渡すこともできる。 [1,2,3].each_with_index { |n,i| puts "#{i}: #{n}" } ところでRuby 1.9からeachやmapはブロックを与えられなかった場合に外部イテレータを返すようになった。これにより、こんな書き方もできるようになった。 e = [1,2,3].each e.with_index { |n,i| puts "#{i}: #{n}" } これで何が嬉しいって、mapでも簡単にインデックス番号を使えるようになったのである。*1 [1,2,3].map.with_index { |n,i|