ジョギング
日課
- (腕立て x 50 + 腹筋 x 50) x 3
体が
- 色々痛い
- 足もそうだし, 首筋とか痛みがある
今日のるびぃ ~ REx - Ruby Examination にチャレンジ (21) ~
REx - Ruby Examination の問題を自分なりにアレンジした上で 1 〜 3 問くらいずつ解いていく. 正直言ってかなり難しい. 尚, irb に動作確認環境は以下の通り.
$ ruby --version ruby 2.1.10p492 (2016-04-01 revision 54464) [x86_64-linux] $ irb --version irb 0.9.6(09/06/30)
例外, raise, RuntimeError
以下のコードを実行するとどうなるか.
begin raise rescue => e puts e.class end
RuntimeError と表示される
以下, irb による確認.
irb(main):001:0> begin irb(main):002:1* raise irb(main):003:1> rescue => e irb(main):004:1> puts e.class irb(main):005:1> end RuntimeError => nil
以下, 解説より抜粋.
- 引数無しで
raise
を呼び出すとRuntimeError
が発生する
irb(main):006:0> raise RuntimeError:
確かに. 尚, raise に例外クラスを引数として渡すと, RuntimeError 以外の例外クラスで例外を発生させることが出来る.
irb(main):001:0> raise RuntimeError: .. irb(main):002:0> raise StandardError StandardError: StandardError .. irb(main):004:0> raise NameError NameError: NameError .. irb(main):005:0> raise TypeError TypeError: TypeError
更に例外
以下のコードを実行するとどうなるか.
begin raise "Error!" rescue => e puts e.class end
RuntimeError が表示される
以下, irb による確認.
irb(main):001:0> begin irb(main):002:1* raise "Error!" irb(main):003:1> rescue => e irb(main):004:1> puts e.class irb(main):005:1> end RuntimeError => nil
以下, 解説より抜粋.
raise
の例外クラスを省略した場合は,RuntimeError
が発生するrescue
の例外クラスを省略した場合は,StandardError
を捕捉するRuntimeError
はStanderdError
のサブクラスである
以下, StandardError クラスのドキュメントより引用.
通常のプログラムで発生する可能性の高い 例外クラスを束ねるためのクラスです。 StandardError とそのサブクラスは、 rescue 節でクラスを省略したときにも捕捉できます。
rescue
節で明示的に例外クラスを指定しなかった場合には, StandardError
クラスに属する例外クラスを捕捉する.
# 以下のように書くと StandardError クラスの例外クラスであれば, rescue 節で捕捉する begin raise rescue => e e.class end
以下, RuntimeError クラスの親クラスを確認するスクリプトを irb で実行した例.
irb(main):001:0> subclass = RuntimeError => RuntimeError irb(main):002:0> irb(main):003:0* loop do irb(main):004:1* superclass = subclass.superclass irb(main):005:1> p superclass irb(main):006:1> subclass = superclass irb(main):007:1> break if superclass == Object irb(main):008:1> end StandardError Exception Object => nil
上記のコードは, 8-1-2 例外処理と例外クラスを理解するプログラムを記述してみよう より引用させて頂いた.
フムフム.