MogLog

メモというか日記というか備忘録というか

【Ruby】数値クラスの階層構造

Rubyの数値クラスの階層構造は以下のようになっている。(『プログラミング言語 Ruby』第3章から)
Numeric
  -Integer
    -Fixnum
    -Bignum
  -Float
  -Complex
  -BigDecimal
  -Rational

また、NumericクラスはObjectクラスを継承している(Objectクラスのサブクラス)。
上の階層構造のとおり、Rubyの全ての数値オブジェクトはNumericクラスのインスタンスになっている。
全ての数値オブジェクトはイミュータブルである。それはつまり、オブジェクトが保持している値を変更できるメソッドは無いということになる。

Integerクラス
全ての整数は、Integerクラスのインスタンスである。31ビットにおさまる整数値はFixnumのインスタンスであり、そうでなければBignumのインスタンスになる。

Floatクラス
浮動小数点のクラス。

Complex
複素数を扱うクラス。
Complexオブジェクトを生成するには、Kernel.#Complex、Complex.rect、Complex.polar、Numeric#to_c、String#to_cのいずれかを使用する。

BigDecimal
2進表現ではなく10進表現を使って任意の精度の実数を表現する

Rational
有理数を扱うクラス。1/3のような有理数を扱うことができる。
IntegerやFloatと同様に、Rational.newではなく、Kernel.#Rationalを使用して、Raitonalオブジェクトを生成する。