Time to Read

30秒

Rubyのブロック引数については、例えば以下のような書き方が許されて大変便利です。

1
2
3
4
5
6
[[[1, 2], 3],
 [[5, 6], 11]].each do |(a, b), c|
  puts "#{a + b} = #{c}"
end
# 3 = 3
# 11 = 11

このカッコ、どうも to_ary が定義されていれば展開されるようです。なので、

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class MatchData
  alias to_ary to_a
end
 
m = "hoge".match /(o).*(e)/
#=> #<MatchData "oge" 1:"o" 2:"e">
 
m.tap do |(whole, first, second)|
  puts " whole match: #{whole}",
       " first match: #{first}",
       "second match: #{second}"
end
#  whole match: oge
#  first match: o
# second match: e

こういう書き方も出来ます(この場合、実はカッコなしでも同じ挙動ですね)。

なお、多重代入の右辺でも to_ary は使われます。詳細はきっとソースなどにありますが、僕は読んでいません ;(

だからなんだというでもないですが、ちょっとしたtipsまでに。