Rational(2,3)とかは、ナニ?メソッド?

実は、本書で「Rational」の定義を間違えて書いてしまいました。
実は「整数を整数で割ったカタチ」なんです。スミマセン。

さて、そんなRationalですが、分数2/3を表すときに

Rational(2,3)

と書きますね。

さて、これナニ?メソッドなの?

と悩む方も多いのではないでしょうか。

実は、メソッドです。
戻り値は、「2を3で割ったという情報を持つRationalクラスのオブジェクト」です。

じゃあ、誰が呼び出しているのか?

実は、Rubyが用意したいろんなしくみんとこで呼び出しているので、ワレワレが特に指定するものではないんです。

本書では紹介してないんですが、割り算して分数を出す方法にはもうひとつ、メソッドquoというのがあります。
コレは、整数とか小数とかの数値オブジェクトが呼び出すメソッドです。2を3で割りたきゃ2がquoを呼び出して

2.quo(3)

と書きます。
これでナニが得られるかと言うと、Ruby1.9ではやっぱりRational(2,3)なんです。

だからどっちでもいいんです。

でも、Rubyってやつぁ、なるべく、人間がアタマで考えたことをそのままプログラムに書けるようにしてくれています。

だから、「2ってヤツがあってソイツを3で割るんだ」という感じに書きたいときはは、2がquoを呼び出して3を引数に指定するとしっくり来るじゃあないですか。

それに対してRationalってヤツは「特にぃーなんかの割り算をしたいわけじゃなくてぇーただ3分の2って割合を表したいだけなのぉー」という感じのとき、誰が呼んだかにはこだわらず書けるじゃあないですか。

そんなつもりで書き分けるといいと思います。どっちがどっちでなきゃダメってことはありません。

なお、どっちも

Rational(2,3).to_f
2.quo(3).to_f

とto_fメソッドを呼び出してやれば小数で表せます。

目次へ

このページの目次へ