例外をtrue, falseに変換する

  • 4
    Like
  • 2
    Comment
More than 1 year has 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