RoadMovie

write down memos or something I found about tech things

Rubyのワンコールブロックがイケメンな話

またメタプログラミングRubyネタ。小ネタです。

著者がRubyは簡潔にかけていいけどイケてないと言っているのが

name = ["i", "my", "me"]
name.map{|n| n.capitalize }
#=> ["I", "My", "Me"]

って感じのが、パイプとか中括弧とかでブロック作ってややこしい、と。 確かにその通りです。ちなみにこれをワンコールブロックというそうです。

ですが、これをRuby1.9以降ならSymbolのProc変換という方法で超簡潔にかけちゃいます!

name = ["i", "my", "me"]
name.map(&:capitalize)
#=> ["I", "My", "Me"]

string_numbers = ["1", "2", "3"]
string_numbers.map(&:to_i)
#=> [1, 2, 3]

イケメン!! ちなみに1.8系とかでも自分で簡単に実装できちゃいます。

なぜこれが動くかとかは下記のサイトが丁寧だったのでご参考まで。

Symbol#to_proc でワンコールブロックを簡潔に書こう - わからん