array.map(&:method)の【&:】の部分ってなに?


mapメソッド

mapメソッドは、要素の数だけ繰り返しブロックを実行し、ブロックの戻り値を集めた配列を作成して返す。

array = ["a", "b", "c"]
array = array.map {|item|  item.upcase }

=> ["a", "b", "c"]

何をしているのか

array.map(&:メソッド名)の型をし、配列の要素1つ1つに(&:メソッド名)で与えられたメソッドを呼んでいる。

['a' ,'b'].map(&:upcase) #=> ["A", "B"]

&はそのメソッドをブロックとして展開することを意味する。
この時、呼び出すオブジェクトは各要素として呼び出す。

例えばメソッドをidとした場合、
map(& )はブロックmap{|x| }に展開
・その中身は:idのメソッド.id

array.map(&:id)は以下と同義になる。

array.map{|x| x.id}
     ||
array.map(&:id)

参考記事

Railsでよく見る arr.map(&:id) の意味
【Ruby】array.map(&:method)を理解する