[解決済み] Rubyのカスタムエランクラス:message属性の継承
2023-01-13 17:38:47
質問
カスタム例外クラスに関する情報があまり見つからないようです。
私が知っていること
独自のエラークラスを宣言し、それを
StandardError
を継承させることで
rescue
d:
class MyCustomError < StandardError
end
を使って上げることができます。
raise MyCustomError, "A message"
というメッセージが表示され、その後、救出する際に
rescue MyCustomError => e
puts e.message # => "A message"
わからないこと
例外にカスタムフィールドを持たせたいのですが、そのためには
message
属性を継承したいのです。を読んでわかったのですが
を読むと、このトピックでは
というのは
@message
は例外クラスのインスタンス変数ではないので、継承がうまくいくか心配です。
どなたか、この件に関する詳細を教えてください。どのようにカスタムエロークラスを
object
属性でどのように実装するのでしょうか?以下は正しいですか。
class MyCustomError < StandardError
attr_reader :object
def initialize(message, object)
super(message)
@object = object
end
end
そして
raise MyCustomError.new(anObject), "A message"
を取得する。
rescue MyCustomError => e
puts e.message # => "A message"
puts e.object # => anObject
はうまくいくのでしょうか、また、うまくいくとして、このやり方は正しいのでしょうか?
どのように解決するのですか?
raise
はすでにメッセージを設定しているので、コンストラクタにメッセージを渡す必要はありません。
class MyCustomError < StandardError
attr_reader :object
def initialize(object)
@object = object
end
end
begin
raise MyCustomError.new("an object"), "a message"
rescue MyCustomError => e
puts e.message # => "a message"
puts e.object # => "an object"
end
を置き換えた
rescue Exception
を
rescue MyCustomError
を使用する場合、以下を参照してください。
Rubyで `rescue Exception => e` とするのはなぜ悪いスタイルなのですか?
.
関連
-
[解決済み] Ruby on Railsで現在の絶対URLを取得するにはどうすればよいですか?
-
[解決済み】AngularJSのスコーププロトタイピング/プロトタイピング継承のニュアンスとは?
-
[解決済み] このタスクを実行するには、Ruby と Sass をインストールし、PATH に配置する必要があります」という警告を解決するには?
-
[解決済み] rubyのClassとKlassの違いは何ですか?
-
[解決済み] 2つのハッシュを比較するにはどうすればよいですか?
-
[解決済み] インストールされているすべてのGemsを削除して最初からやり直す
-
[解決済み] rspecでテストグループを無効にする?
-
[解決済み] Rubyで1行でメソッドを定義するには?
-
[解決済み] 配列要素のインデックスを O(n) よりも高速に取得する。
-
[解決済み] メソッド名の最後にある「!」や「?」は何のため?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Rubyで「例外 => e」を救済するのはなぜ悪いスタイルなのですか?
-
[解決済み] Rubyの理想的なプロジェクト構造
-
[解決済み] key => "value"`と`key: "value"`のハッシュ表記に違いはありますか?
-
[解決済み] ハッシュの配列をハッシュの値でソートするにはどうしたらいいですか?
-
[解決済み] Ubuntu 14.04にRuby 2.1.4をインストールする方法
-
[解決済み] Rubyのsend()は何をするのですか?
-
[解決済み] RubyでDateTimeの時間部分を設定する
-
[解決済み] ruby の rescue 節に複数のエラークラスを DRY に渡す方法
-
[解決済み] Rubyで1行でメソッドを定義するには?
-
[解決済み] RubyでDateTime.nowをUTCに変換するには?