[解決済み] raise "foo"`と`raise Exception.new("foo")` の違いは何ですか?
質問
技術的、哲学的、概念的、あるいはその他の点で、次のような違いがありますか。
raise "foo"
と
raise Exception.new("foo")
?
どのように解決するのですか?
技術的には、最初のものは RuntimeError を発生させ、メッセージは次のように設定されます。
"foo"
に設定されたメッセージでExceptionを発生させ、2つ目は
"foo"
.
実務的には、前者を使いたいときと、後者を使いたいときとでは、かなりの差があります。
簡単に言えば、おそらくあなたは
RuntimeError
ではなく
Exception
. 引数のないレスキューブロックは
RuntimeErrors
は捕捉されますが
Exception
s. ですから、もし
Exception
を発生させても、このコードはそれを捕捉しません。
begin
rescue
end
をキャッチするために
Exception
をキャッチするためには、このようにする必要があります。
begin
rescue Exception
end
これは、ある意味で
Exception
よりも悪いエラーであるということです。
RuntimeError
というのは、そこから回復するために、より多くの作業をしなければならないからです。
つまり、どちらを選ぶかは、プロジェクトがどのようにエラー処理を行うかによります。例えば、私たちのデーモンでは、メインループに空白のレスキューがあり、そこで
RuntimeErrors
をキャッチし、それらを報告し、そして継続します。しかし、1つか2つの状況では、デーモンが本当に本当にエラーで死ぬことを望みます。そして、その場合、私たちは
Exception
を発生させ、それは私たちのquot;通常のエラー処理コード"を通過して外に出ます。
また、ライブラリコードを書いている場合は、おそらく
RuntimeError
ではなく
Exception
というエラーが発生すると、ライブラリのユーザは驚くでしょう。
rescue
ブロックでは捕捉できないようなエラーが発生した場合、ユーザーは驚くでしょうし、その理由を理解するのに時間がかかるでしょう。
最後に言っておきますが
RuntimeError
のサブクラスである
StandardError
クラスのサブクラスであり、実際のルールとしては
raise
任意の
はオブジェクトのタイプ、空白は
rescue
を継承するものだけを捕捉します。
StandardError
. それ以外はすべて特定する必要があります。
関連
-
[解決済み] 投げる」と「投げる元」は違うのですか?
-
[解決済み] rake db:migrate db:reset とdb:schema:loadの違いについて
-
[解決済み] イコール、エクル、==、==の違いは何ですか?
-
[解決済み] Rubyのincludeとrequireの違いは何ですか?
-
[解決済み] Rubyのmapとcollectの違い?
-
[解決済み] Ruby、execとsystemと%x()またはBackticksの違いについて
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】 `throw new Error` と `throw someObject` の違いは何ですか?
-
[解決済み】Rubyの "and "と"&&"の違い?
-
[解決済み】Rubyのrequire_relativeとrequireの違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Ubuntu 14.04にRuby 2.1.4をインストールする方法
-
[解決済み] doブロックと中括弧{}の使い分け
-
[解決済み] Herokuの基本的なアプリのロードに2秒かかるのはなぜですか?
-
[解決済み] bundler vs RVM vs gems vs RubyGems vs gemsets vs system ruby [closed].
-
[解決済み] rspecでテストグループを無効にする?
-
[解決済み] メソッドから2つ以上の値を返す
-
[解決済み] ルビー、!オペレーター(a/k/a ダブルバン)[重複]|日本郵船
-
[解決済み] Rubyで2つの配列のマージとインターリーブ
-
[解決済み] Rubyで配列の最後の要素を取得するには?
-
[解決済み] Rubyで親のクラス名を取得するには?