質問
Rubyには二つの異なる除外機構:捨てる/Catch育/レスキュー"をご覧ください。
なぜかったですね。
の場合はご利用の方やいないのですか?
解決
と思い http://hasno.info/ruby-gotchas-and-caveats については説明の相違点
catch/throwと同じではありませんraise/レスキュー"をご覧ください。catch/throwができる早口よりブロックに戻る点が獲れに定義された特定のシンボルを上げ救助の実例外を扱うものに関する例外オブジェクトです。
他のヒント
raise
,fail
,rescue
, は、ensure
取扱い 誤差, としても知られる 例外throw
やcatch
は 制御フロー
他の 言語Rubyの投げキャッチを使用しない例外をスローしました。その代わりに、それらの提供終了の実行がない さらに作業が必要です。(グリム,2011)
終了単一レベルの制御フローのように while
ループができな return
.終端を様々なレベルでの制御フローのように、入れ子ループできる throw
.
の例外機構を救は捨て行いざという時でも何が飛び出すのに深く入れ子の構築時に通常の処となります。することを投げます。(トーマス-ハ2001)
参考文献
- グリム,Avdi."投げ釣め、救助活動...ねん!" RubyLearningます。N.頁, 11月には2011年のこと。ます。1月.2012年. http://rubylearning.com/blog/2011/07/12/throw-catch-raise-rescue--im-so-confused/.
- トーマス-デーヴ、アンドリューです。"プログラミング。 :の実践的なプログラマーされています。N.頁, 2001年.ます。29。2015年までに http://ruby-doc.com/docs/ProgrammingRuby/html/tut_exceptions.html.
https://coderwall.com/p/lhkkug/don-t-confuse-ruby-s-throw-statement-with-raise は説明するとは思いを改善できます。以上をまとめますと、わがnicking一部のコードサンプルからのどん:
raise
/rescue
最も近い類似のthrow
/catch
を構築でおなじみのその他の言語(またはPythonのraise
/except
).だがエラーを検出した状態ですthrow
でその他の言語により、raise
Ruby.Rubyの
throw
/catch
きの休憩執行上のスタックを探してcatch
(raise
/rescue
ながのようになっていた。で使用することは稀であった時に"まで徒歩のスタック見つかるまで対応catch
"行動というアルゴリズムをまもるのではなく、意味の考えthrow
として対応するエラー条件です。うキャッチ&スローされないルビー? ある提案もの
throw
/catch
施工性が向上します。
の具体的な行動の違いて:
rescue Foo
ま救助のインスタンスFoo
どのサブクラスFoo
.catch(foo)
みッ 同じオブジェクトFoo
.だりすることはできないパスcatch
クラス名ャのインスタンスでない同一性の比較.のためのインスタンスcatch("foo") do throw "foo" end
でます---
UncaughtThrowError: uncaught throw "foo"
(またはArgumentError
ここでコンポーネントのRuby前2.2)複数の救済条項で一覧表示することができ...
begin do_something_error_prone rescue AParticularKindOfError # Insert heroism here. rescue write_to_error_log raise end
から複数の
catch
esが必要な入れ子...catch :foo do catch :bar do do_something_that_can_throw_foo_or_bar end end
裸
rescue
に相当rescue StandardError
での慣用句の構築を行う。の"ベアcatch
"のように、catch() {throw :foo}
, ことができなくなっャストも行ないます。