rescueしたい例外を配列で指定

begin
  raise ArgumentError
rescue ArgumentError, NoMethodError
  puts $!.class.name
end

出力結果

ArgumentError

Rubyではこんな風にrescueには複数の例外のクラスを記述できるけど、このrescueしたい例外クラス群を配列で指定したい。

まずは、rescue以後をメソッドの引数みたいに括弧で括ってみる

begin
  raise ArgumentError
rescue(ArgumentError, NoMethodError)
  puts $!.class.name
end

結果

SyntaxError: compile error
(irb):29: syntax error, unexpected ')', expecting '='
(irb):31: syntax error, unexpected kEND, expecting ')'
	from (irb):31

NG。rescueの後ろには、括弧は使えません。
http://www.ruby-lang.org/ja/man/html/_C0A9B8E6B9BDC2A4.html#rescue.bd.a4.be.fe.bb.d2


でも、*を使うことはできる

a = [ArgumentError, NoMethodError]
begin
  raise ArgumentError
rescue *a
    puts $!.class.name
end

begin
  raise NoMethodError
rescue *a
    puts $!.class.name
end

出力結果

ArgumentError
NoMethodError

なるほどねー。