#はじめに
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}