Ruby には、Throw/Catch と Raise/Rescue という 2 つの異なる例外メカニズムがあります。
なぜ2つあるのですか?
どちらを使用して、どちらを使用しない方がよいのはどのような場合ですか?
ベストアンサー1
raise
、、、ハンドルfail
rescue
ensure
エラー、 としても知られている例外throw
、、、およびはcatch
break
next
制御フロー
他の言語とは異なり、Ruby の throw と catch は例外には使用されません。代わりに、それ以上の作業が必要ない場合に実行を早期に終了する方法を提供します。(Grimm、2011)
ループのような単一レベルの制御フローを終了するにはwhile
、 を使用しますbreak
。ネストされたループのような複数レベルの制御フローを終了するには、 を使用しますthrow
。
例外メカニズムである raise と rescue は、何か問題が起きたときに実行を中止するのに便利ですが、通常の処理中に深くネストされた構造から抜け出せると便利な場合もあります。このような場合に catch と throw が役立ちます。(Thomas and Hunt、2001)
参考文献
- Grimm。「投げる、キャッチする、上げる、救う… 混乱しちゃいます!」RubyLearning ブログ。Np、2011 年 7 月 11 日。Web。2012 年 1 月 1 日。http://rubylearning.com/blog/2011/07/12/throw-catch-raise-rescue--im-so-confused/。
- Thomas, Hunt. 「プログラミング Ruby」: The Pragmatic Programmer's Guide。Np、2001年。Web。2015年9月29日。http://ruby-doc.com/docs/ProgrammingRuby/html/tut_exceptions.html。