arr.map(&:to_s) を使ってみる

参考

`&:` は、`&` とシンボルを示す`:`に分けられます。それをかっこで示すと、arr.map(&(:to_s)) のようになります。

rubyの特殊なルールとして、& の後にブロック以外のものを書いた場合は、自動的に to_proc が呼ばれるという決まりがあります。だから、arr.map(&(:to_s)) は、arr.map(&(:to_s.to_proc)) と変換されます。

&: は「配列などの要素に対して、要素の持つメソッドを繰り返し実行する」処理を短く書くための特殊な文法(シンタックスシュガーといいます)です。

参考:Railsのarr.map(&:to_s)とは【メンターが回答】 | TechAcademyマガジン

  

 オブジェクトは&で修飾でき、 blockをprocに、 procをblockに 変換する。

&はさらに、 procでないオブジェクトに対してto_procを呼んでからblockに変換する。

Symbol#to_procは、引数を1つとり、そのsymbolをメソッドとして呼ぶprocを返す。

参考:Rubyの array.map(&:to_s) 記法を紐解く

 

使ってみる

f:id:matt-note:20181010125815p:plain

f:id:matt-note:20181010132413p:plain

 

まとめ

arr.map(&(:to_s)) としても実行できる。

:to_s は、arr内の要素が持っているメソッドをシンボルで記述したもの。

&: は「配列などの要素に対して、要素の持つメソッドを繰り返し実行する」処理を短く書くためのシンタックスシュガー。

 

& を使わない場合

f:id:matt-note:20181010131930p:plain