:to_s
で to_s のシンボル を渡しています。単に to_s と書くとその名前の変数になってしまうので、メソッドを指定するためにシンボルにしています。
&
の方はそのメソッドをブロックとして展開することを意味します。これは配列の定義、渡す際の展開の *
と同じような関係です。
そのため、&:to_s
は to_s メソッドをブロックとして渡すことになります。この時、メソッドのレシーバー(呼び出すオブジェクト)は各要素です。
イメージとしては次のような感じです。
map(& )
はブロック map{|x| }
に展開
- その中身は :to_s のメソッド
.to_s
その結果 arr.map(&:to_s)
は以下と同じことになります。
arr.map{|x| x.to_s}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2014/08/25 00:54