FrontPage  Index  Search  Changes  Login

(Ruby)例外・大域脱出

例外

例外の捕捉

begin
  # ... 本処理
rescue [捕捉する例外クラス [=> 変数名]]
  # ... エラー処理
ensure
  # ... 例外発生の有無にかかわらず常に実行
end

グローバル変数$!に例外オブジェクトへのリファレンスが格納される。

ユーザ定義の例外

自分で例外を作成する場合は、StandardErrorまたはその子供のサブクラスにすると良いらしい。

例外を投げる

raise [Exception階層のクラス名] "メッセージ", [caller]
# callerはKernel.callerでスタックトレースを生成する。

大域脱出catchとthrow

入れ子の深いところから脱出したい場合に例外を使うより便利

catch (:done) do
  ...
    ...
      ...
      throw :done
end

catchとthrowはブロックの内側以外で使用しても大丈夫。

Last modified:2003/11/30 22:04:24
Keyword(s):
References: