いろいろな例外を発生させてみよう
def ex
yield
rescue
"#{$!} (#{$!.class})"
end
ex{1.to_sym} # => "undefined method `to_sym' for 1:Fixnum (NoMethodError)"
ex{1 + "1"} # => "String can't be coerced into Fixnum (TypeError)"
いろいろな例外を捕捉してみよう
KeyError
を捕捉しようStopIteration
も捕捉しよう
def ex
yield
rescue ...
end
以下のコードをデバッグしてみよう
- どんな例外が発生するか
- 本当は何をしたかったのか
- 修正してみよう
[0..9].map{|i| i * 2}
ensure 節で return すると どうなるか調べよう
def ex
result = yield
$stderr.puts :success
result
ensure
$stderr.puts :ensure # ここで return すると ...
end