« Posts under Ruby

Rubyにおけるintの最大値とは。エラー処理は?

ふと気になって、いじってみる。

元のソースはトラックバック先のものとほぼ変わらず。

#! ruby -Ks
puts 'Input Number'
int = gets.chomp
puts 'Input Number is ' + int.to_s
puts 'Next Number ' + (int.to_i + 1).to_s

このプログラムを実行すると、入力待ち画面になるので以下のような数字を入力してみる

  • 2147483647
  • -2147483648
  • A
  • 1000000000000000000000
  • 結果は以下のようになる。

  • 2147483648
  • -2147483647
  • 1
  • 1000000000000000000001
  • あれ、なんでオーバーフローしねえの(汗
    おっかしいなあと思って逆引きRubyを読んでみる。

    RubyではFixnumクラスとBignumクラスで整数値を、Floatクラスで浮動小数点を扱うことができます。またMathモジュールでは三角関数や対数などを計算する関数が提供されます。 Fixnumは31ビットまたは63ビットの固定長整数を扱うクラスですが、演算結果をこの範囲を超える場合、自動的にBignumに拡張されます。Bignumは無限多倍長整数でメモリの許す限りの大きな値を扱うことができます。

    引用元:逆引きRuby -数値

    なんと、Rubyではこのような場合にはオーバーフローは起きずにそのままBignumに拡張されるのだ。
    これは逆に気づかない奴続出で、他言語触ったりちょっとしたことでエラー多発させるやつが続出するんじゃなかろうかw

    しかし、ちょっとした悪戯心から面白いRubyの特性を垣間見た気がするw

    Mac(Snow Leopard)へのRVMインストール

    先日、MacBookProを購入したので、MacBookでRubyの開発ができるようにしようと環境を整えだした。
    その際に、Rubyに1.8系と1.9系の2種類が未だ混在していることを思い出し、同時に使えるようにRuby Version Managerを導入しようと思い立ったのが睡眠不足の原因となったのである。

    先人達が言うには、「gemで落としてくればすぐ終わる」というものであった。
    だがどうもgemで落としてきてもまともにインストールされない、コマンドが通らない…。
    なので、どう入れればいいかを一旦書こうと思う。

    まず、MacにインストールされているRubyを確認する。
    これはSnow Leopardであれば初期からRuby1.8がインストールされているようなので割愛。
    もしも入っていなければMac Portsを利用してインストールすること。

    RVMは公式の話ではgemではなく、gitから直接落としたほうがいいらしい。なので、Mac Portsを使ってgit-coreをインストールする。(よけいなモジュールをインストールしたくない場合は、gitのソースを落としてきて自前でやるのがいいかも)

    $ sudo port install git-core

    上記のコマンドをターミナルから実行すればいいのだが、curlを別途インストールしておいて、tigを使うこと今後のgit利用が便利になるかもしれない。

    何はともあれ、gitがこれでインストールされたはずなのでRVMのインストールに移る。
    RVMをgitからインストールする場合は以下のコマンドを実行する。

    $ git clone –depth 1 git://github.com/wayneeseguin/rvm.git
    $ cd rvm
    $ ./install

    この辺りはRVMの公式でも書かれている。

    その後、以下を.bash_profileなどに書き込んでおいて、ターミナルを再起動させる。

    if [[ -s /Users/hogehoge/.rvm/scripts/rvm ]] ; then source /Users/hogehoge/.rvm/scripts/rvm ; fi

    これでrvmコマンドが通るようになるはずなのだが、私の環境では動かず…。
    色々調べるうちに、どうやら次の記述を.bash_profileに書き込み、先ほどのPATHをその次に書き込んでおくことで動くことが判明

    source ~/.rvm/scripts/rvm

    これで晴れてrvmコマンドが通るようになったので、1.8と1.9をインストールし、デフォルトで利用するRubyをRVMの1.9に変更することにした。
    ここまでで結局3−4時間ほどかかってしまったが、とにかく動くようになった。
    どうも初期状態のままで.bash_profileや.bashrcがまっさらだったのが原因だったようにも思える。
    PATHの通し方は難しいが、今後もちゃんと向き合えばターミナルから色んなことができると思うので、Macでの開発もどんどん試していきたいところだ。