Rubyのお勉強(その2)

12) 例外処理
下記のexに例外オブジェクトが渡される。

begin
 例外を発生させる可能性のある処理
rescue => ex
 例外が起こった場合の処理
ensure
 例外の有無に関わらず実行される処理
end

ex.class : 例外の種類
ex.message : 例外のメッセージ
ex.backtrace : 例外の発生した位置に関する情報

概ね、Javaのtry〜catch〜finallyに対応しそう。ただし、rescure節でretryで処理のやり直しができる。catch と throwは例外ではなく別の意味を持つ。(多階層ループのbreak的な使い方に使う)

"n = Integer(val) rescure 0" と一行で書く簡易表現もあり。

クラスを指定しての捕捉は、"rescure Class1 => ex" となる
無指定は、StandardError とそのサブクラスが対象となる。

13) Numericクラス
非常に直感的なクラス階層。
Numeric
 + Integer
  + Fixnum
  + Bignum
 + Float

演算中の型変換は自動に行われる。phpと異なり変数の「型」が変更されるのではなく、「上位クラスに」に出世するイメージかな。面白い実装だ。

前に出てきた、10.times{|i| ...} や 3.upto(8){|i| ...} 等はIntegerクラスのメソッドらしい。{}の中身がなんとも不思議。