
今まではJavaを主に使っていたのですが、最近Rubyを使い始めた者です。
rescue節で例外を捕捉し、例外が発生した状況などの補足情報を新しい例外オブジェクトに付加して、より抽象度の高い例外として再スローしたいと思っています。
しかし困ったことに、Rubyの例外クラスでは、JavaのExceptionクラスのようにcauseを引数に渡して例外オブジェクトを生成することはできないようです。
Rubyではこのような場合、どのような方法で例外の情報を新しい例外オブジェクトに引き継ぐのが一般的なのでしょうか?
よろしくお願いいたします。
No.2
- 回答日時:
組み込みライブラリにないのであえてやろうとすれば自前で用意するしかないです。
私自身はより抽象度の高い例外に元の例外情報を付けたいと思ったことはないです。例外ハンドラ内で解釈して抽象度の高い例外を作成しますので。どうもありがとうございます。
> 例外ハンドラ内で解釈して抽象度の高い例外を作成しますので。
その場合、デバッグ時に例外が発生した箇所を特定できなくて困ると思うのですが・・・。
No.1
- 回答日時:
JAVAの知識が無く、ご質問をよく理解できていないので外しているかもしれませんが、最近発生した例外の情報は変数$!や$@で取得できます。
これを自分で定義したクラスに渡してあげれば良いのではないでしょうか。
class MyError < Exception
attr_reader :my_messages
def initialize(mes, *my_mes)
super(mes)
@my_messages = my_mes
end
end
i = catch(:exit) do
begin
raise "hoge"
rescue RuntimeError
err = MyError.new($!,$@,"foo")
throw :exit, err
end
end
p i
p i.message
p i.my_messages
この回答への補足
回答どうもありがとうございます。
確かに自分でクラスを定義すれば可能なのは分かっているのですが、
私がお聞きしたかったことはそういうことではなくて、
「Rubyの文化や思想に倣って考えたときにどうするべきであるのか?」
ということでした。
仮に、siffon9さんの提案された方法がRubyで例外を扱う際にベストな方法だとしたら、当然RubyのExceptionクラスはそのような設計になっているはずですよね?
しかし、Rubyは十分に成熟した言語であるにもかかわらず、そのような設計にはなっていません。
Ruby開発者が毎度毎度そのような例外のライブラリを別途導入して開発している(もしくは新たに例外クラスを定義している)とも考えにくいので、そこには何か文化的な理由があるのではないかと思うのです。
主にその辺のことについてお聞きしたいと思っておりました。
ですから、回答が「Rubyでは普通そんな設計はしない」というものでも結構だったのですが・・・。
質問が分かりにくく、申し訳ございませんでした。
もう一度答えていただけるとうれしいです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java 複数TBLのオブジェクトを1つの変数(オブジェクト)でまとめて管理したい 1 2022/12/17 00:12
- Java オブジェクト指向プログラミングの実践本を紹介してください 3 2022/09/19 04:56
- JavaScript オブジェクト配列の各メンバを任意の式で評価して、その評価値が最大のオブジェクトを返す関数はありますか 2 2023/05/20 15:02
- 日本語 「いる」と「ある」の違いは、対象が生きているかどうかと聞きましたが、幽霊はなぜ「いる」ですか その2 7 2023/05/09 18:09
- その他(プログラミング・Web制作) Pythonのオブジェクトの関数について 2 2023/05/11 19:15
- 英語 advice(アドバイス) 【可算名詞】 [通例複数形で] (外交・政治上などの)報告; 【商業】 1 2022/12/18 00:06
- HTML・CSS 別サイトのHTML内にある情報を自動取得して、自分のサイトに組込む方法を教えてください。 例えば、Y 1 2023/06/15 08:09
- CPU・メモリ・マザーボード PC購入時、CPUの品質(?)はどこまで考慮すべきでしょうか。 10 2022/06/04 11:27
- その他(海外) 現在、アメリカに在住の主人を日本に呼び寄せるために、在留資格認定証明書を取得したのですが、有効期限の 1 2023/01/09 20:25
- 訴訟・裁判 契約の法律質問 3 2022/11/18 21:39
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
1、Rstudioで回帰直線を求める...
-
C言語の入力した文字を反転させ...
-
Ruby require ライブラリー
-
pandasでsqlite3にテーブル作成...
-
(再質問)エクセルのマクロボ...
-
100万件越えCSVから条件を満た...
-
パソコンのスクリーンセーバー...
-
ruby while式
-
ruby loopメソッド 変数(再喝)
-
WinSCPで画像のように puttyを...
-
pythonエラー
-
英数字を含む文字列(0-9,A-Z)...
-
ruby OpenURI::Meta
-
ruby loopメソッド 変数
-
ruby raise句
-
ルビー言語 csvファイル 続き
-
ルビー言語 ライブラリー
-
教えてください
-
VBScriptでExcel(2019)上のデー...
-
ruby 配列
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「arg」は何の略?
-
【ruby】無名関数?でブロック...
-
VBA/GetTickCountの49.7日の境...
-
【Ruby】基本的な質問 数字を...
-
例外の再スロー時に、その原因...
-
【ruby】 『クラスの生成に失...
-
Ruby Selenium 要素の待機
-
【ruby】クラスCGIを改造したい
-
Array#eachのブロック中で要素追加
-
.size .atとは?(挿入ソート)
-
Ruby Selenium リンクの取得方法
-
ruby メソッドのリターン
-
ブロック2 Ruby認定試験対策問題
-
プログラミング言語 R
-
rubyについて質問です
-
計算の途中経過を表示
-
Ruby evalで代入
-
Rubyでクラスファイルをディレ...
-
rubyについて質問です
-
cos波表示について マクローリ...
おすすめ情報