Posted at

例外をtrue, falseに変換する

More than 5 years have passed since last update.

if文で例外が投げられたか判定したくて調べたけどなかったので、作ってみた。

例えばIntegerメソッドがArgumentErrorを投げるかどうか判定したいとき、こういうふうに書くことができる

Thrown.thrown?(ArgumentError){ Integer('10') } # false

Thrown.thrown?(ArgumentError){ Integer(10) } # false
Thrown.thrown?(ArgumentError){ Integer('a') } # true

Thrown.thrown?(ArgumentError){ Integer(:a) }
# TypeError: can't convert Symbol into Integer

実装はかなりシンプル。

class Thrown

class << self
def thrown?(exception_klass)
begin
yield
rescue
if $!.is_a? exception_klass
return true
else
raise $!
end
end
return false
end
end
end