はじめに
Railsの勉強(Railsチュートリアル)をはじめて、よく目にするarr.map(&:id)がいまいち理解できていなかったので簡単にまとめてみました。
mapメソッド
mapメソッドは、要素の数だけ繰り返しブロックを実行し、ブロックの戻り値を集めた配列を作成して返します。
(&:id)について
:id で id のシンボル を渡しています。
単に id と書くとその名前の変数になってしまうので、メソッドを指定するためにシンボルにしています。
& の方はそのメソッドをブロックとして展開することを意味します。
そのため、&:id は id メソッドをブロックとして渡すことになります。
この時、メソッドのレシーバー(呼び出すオブジェクト)は各要素です。
イメージとしては次のような感じです。
-
map(& )はブロックmap{|x| }に展開 - その中身は
:idのメソッド.id
その結果 arr.map(&:id) は以下と同じことになります。
arr.map{|x| x.id}
参考