例外も忘れてた。
ウィルコムストアで購入したW-ZERO3[es]が未だに出荷去らずにもやもや、もんもん。それでもキャラバンは進むし、Rubyの勉強も進む、というわけで例外処理。
基本。
begin raise "逃げろー" rescue => exp printf("%s:%s?n", "rescue", exp.to_s) ensure puts "ensure" end
結果。
rescue:逃げろー ensure
私が一番理解しているつもりのC#に例えるなら、
C# | Ruby |
---|---|
try | begin |
catch | rescue |
finally | ensure |
という感じのようだ。
例外の種類によって処理を分ける。
begin raise SyntaxError.new("シンタックスエラーだよー") rescue SyntaxError => exp printf("%s:%s?n", "SyntaxError", exp.to_s) rescue => exp p exp end
結果。
SyntaxError:シンタックスエラーだよー
別の例外を発生させ、例外の種類を指定していないrescue節を通してみる。
begin raise IOError.new("IOエラーだよー") rescue SyntaxError => exp printf("%s:%s?n", "SyntaxError", exp.to_s) rescue => exp printf("%s:%s?n", "何の例外かな?", exp.to_s) end
結果。
何の例外かな?:IOエラーだよー
こんなのもある。
begin puts "例外が発生するかも?" rescue puts "発生しました。" else puts "発生しませんでした。" ensure puts "発生してもしていなくても関係ありません。" end
elseは例外が発生しなかった場合に行われるので、結果は、
例外が発生するかも? 発生しませんでした。 発生してもしていなくても関係ありません。
となる。
例外を発生させてみる。
begin raise rescue puts "発生しました。" else puts "発生しませんでした。" ensure puts "発生してもしていなくても関係ありません。" end
結果。
発生しました。 発生してもしていなくても関係ありません。
- 作者: 青木峰郎,後藤裕蔵,高橋征義,まつもとゆきひろ
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2004/05
- メディア: 単行本
- クリック: 35回
- この商品を含むブログ (68件) を見る