FrontPage  Index  Search  Changes  Login

niche programmer - (Ruby)例外・大域脱出 Diff

  • Added parts are displayed like this.
  • Deleted parts are displayed like this.

!例外
!!例外の捕捉
begin
   # ... 本処理
rescue [捕捉する例外クラス [=> 変数名]]
   # ... エラー処理
ensure
   # ... 例外発生の有無にかかわらず常に実行
end
グローバル変数$!に例外オブジェクトへのリファレンスが格納される。
!!ユーザ定義の例外
自分で例外を作成する場合は、StandardErrorまたはその子供のサブクラスにすると良いらしい。

!!例外を投げる
raise [Exception階層のクラス名] "メッセージ", [caller]
# callerはKernel.callerでスタックトレースを生成する。
!大域脱出catchとthrow
入れ子の深いところから脱出したい場合に例外を使うより便利
catch (:done) do
   ...
     ...
       ...
       throw :done
end
catchとthrowはブロックの内側以外で使用しても大丈夫。