2015年6月17日水曜日

[Ruby]ドットひとつで結果が変わってしまう例

嵌ったのでメモしておきます。
Ruby 1.9.3 で動作確認しています。

1-2+3 を計算したいとします。

普通に計算させるとこうなります。

    > p 1-2+3
    2

ところが、(何かの拍子に)1 のうしろにドットを入れてしまうとこうなります。

    > p 1.-2+3   # 1-2+3 または 1.0-2+3 を計算しているつもり
    -4             # 予想外

これは、ドットの直後の "-" が数学の演算子ではなくメソッドと解釈されたので、
後ろの演算が先に評価され、1-(2+3) の結果が返ってきたのだと思います。
もう少し分かりやすく書くとこうなります。

    1.minus(2+3)

ここで minus は a.minus(b) において a-b の結果を返すメソッドを表します。

ちなみに、ドットのうしろに 0 を入れると "1.0" が実数と解釈されるので

    > p 1.0-2+3
    2.0

となります。

0 件のコメント:

コメントを投稿