Ruby で例外を発生させることと例外をスローすることの違いは何ですか? 質問する

Ruby で例外を発生させることと例外をスローすることの違いは何ですか? 質問する

Ruby には、Throw/Catch と Raise/Rescue という 2 つの異なる例外メカニズムがあります。

なぜ2つあるのですか?

どちらを使用して、どちらを使用しない方がよいのはどのような場合ですか?

ベストアンサー1

  • raise、、、ハンドルfail​​rescueensureエラー、 としても知られている例外
  • throw、、、およびはcatchbreaknext制御フロー

他の言語とは異なり、Ruby の throw と catch は例外には使用されません。代わりに、それ以上の作業が必要ない場合に実行を早期に終了する方法を提供します。(Grimm、2011)

ループのような単一レベルの制御フローを終了するにはwhile、 を使用しますbreak。ネストされたループのような複数レベルの制御フローを終了するには、 を使用しますthrow

例外メカニズムである raise と rescue は、何か問題が起きたときに実行を中止するのに便利ですが、通常の処理中に深くネストされた構造から抜け出せると便利な場合もあります。このような場合に catch と throw が役立ちます。(Thomas and Hunt、2001)

参考文献

  1. Grimm。「投げる、キャッチする、上げる、救う… 混乱しちゃいます!」RubyLearning ブログ。Np、2011 年 7 月 11 日。Web。2012 年 1 月 1 日。http://rubylearning.com/blog/2011/07/12/throw-catch-raise-rescue--im-so-confused/
  2. Thomas, Hunt. 「プログラミング Ruby」: The Pragmatic Programmer's Guide。Np、2001年。Web。2015年9月29日。http://ruby-doc.com/docs/ProgrammingRuby/html/tut_exceptions.html

おすすめ記事