hakeの日記

Windows環境でプログラミングの勉強をしています。

rescue

Rubyの勉強

呼び出したメソッドでエラーが発生してもちゃんと補足してくれました <当たり前?
$@には呼び出した行と、実際にエラーが発生した行の2つが格納される。

begin
  a = nil
  a.abc
rescue Exception => err
  p err.class  #=> NoMethodError
  p err        #=> #<NoMethodError: undefined method `abc' for nil:NilClass>
  p $@         #=> ["F:/ruby_RDE/rb49F.tmp:3"]
  p $!         #=> #<NoMethodError: undefined method `abc' for nil:NilClass>
end


# methodでエラーになった場合
def test
  a = String.new
  a.abc
end

begin
  test
rescue Exception => err
  p err        #=> #<NoMethodError: undefined method `abc' for "":String>
  p $@         #=> ["F:/ruby_RDE/rb49F.tmp:12:in `test'", "F:/ruby_RDE/rb49F.tmp:16"]
  p $!         #=> #<NoMethodError: undefined method `abc' for "":String>
end