Jewel-mmo開発日記

RubyでMMORPGを作る過程を記録する日記。 Yokohama.rb 発起人。
2006-04-19

[Ruby]例外が発生したとき END {} 内で場合分けするには

予期せぬ例外でメインの処理が中断したときに END {} 内の処理を場合分けしたくなった。そういえば test/unit ではどうなっているのだろうと調べると、[ruby-list:41927] にちょうどその話しが。

at_exit do
  unless $! || Test::Unit.run?
    exit Test::Unit::AutoRunner.run
  end
end

なるほど。

気になったので、

begin 
  aaa
rescue NameError
  p $!
ensure
  p $!
end
p $!

を実行すると、

#<NameError: undefined local variable or method `aaa' for main:Object>
nil
nil

となる。

__

あれ、この exit なんで呼んでいるんだろう?

exit Test::Unit::AutoRunner.run