知らなかった仕様
検証した環境
$ ruby -v ruby 3.0.1p64 (2021-04-05 revision 0fb782ee38) [x86_64-darwin19]
出典
例外を発生させます。第一の形式(引用注:
raise
のみの記述のこと)では直前の例外を再発生させます。 - 制御構造 (Ruby 3.1 リファレンスマニュアル)
というようになっているので、raiseは引数を省略させると同じエラーを発生させる
実例
raiseの直後にraiseを呼ぶというのはrescue句以外だとつかわない、もとよりできないと思うのでrescueの場合の例を記述する。
以下の内容で test.rb
をつくる
def demo_raise(happen_exception) raise StandardError, "これはエラーです" if happen_exception return true end begin demo_raise(true) rescue p "catch exception" raise end
これを実行すると以下のようになる
$ ruby test.rb "catch exception" test.rb:2:in `demo_raise': これはエラーです (StandardError) from test.rb:7:in `<main>'
raiseには何も指定していないのに直前のエラーを出している。ただし ensure
や ブロックの外だと拾ってもらえないので気をつける