気になっていたRailsの表現
array.map(&:method)
まずmapメソッドは配列に対してブロックを実行して、新しい配列を作るメソッドになります。
numbers = ["68", "65", "6C", "6C", "6F"] p numbers.map {|item| item.to_i(16) } => [104, 101, 108, 108, 111]
注: to_iメソッドで16進数に変換しています。
これを先の方法で書き換えてみると、
numbers = ["68", "65", "6C", "6C", "6F"] p numbers.map(&:to_i(16) ) => [104, 101, 108, 108, 111]
となります。短くかけていいですよね。 具体的に説明すると、まずこれはto_iというメソッドをシンボル型で渡しています。 単純に(to_i)みたいな形で書いてしまうと変数として扱われてしまうので、シンボル型で渡すことでメソッドとして扱われます。 さらに&と記述することでブロックとして展開されます。
map(&)
を見かけたら、 頭の中で
map{|x| }
に変換し、
:to_i
を見たら
map{ |x| x.to_i}
の中の.to_i部分を意味していると変換してみましょう。 頭の中で常に変換すると、英語を読むみたいにコード読めるようになる(はずです) ブロックはRailsでは必須のイディオムですが、map {|item| item.to_i(16) }の書き方は少々長くなってしまうので積極的に&:を使っていきたいですね。