rubyではなぜnil.to_iがゼロを返すのか?
先日始まったオライリーのRubyブログにでていたエントリ。
Is this A Good Thing or not? - O'Reilly Ruby
Rubyでは,nilとfalseが「偽」であり,それ以外は「真」と扱われる。perlでは空文字列や0も偽になる。0はC系の言語でも偽である。このへんは最初はとまどいますね。rubyがnilとfalseだけを偽にしたのは,ブーリアン値もオブジェクトとして扱うからかなあ? 0とか空文字列はIntegerやStringのインスタンスであって,NilCalssのインスタンスではないと。うーん,いまいち説得力がない。
あ,このエントリでは問題はそこじゃなくて,nil.to_iは偽にならない0ではなく,nilを返すか,例外を投げるのがいいんじゃないかと書いてます。false.to_iは例外を投げるんですよね。
irb(main):001:0> nil.to_i => 0 irb(main):002:0> "".to_i => 0 irb(main):003:0> false.to_i NoMethodError: undefined method `to_i' for false:FalseClass from (irb):3 irb(main):004:0> true.to_i NoMethodError: undefined method `to_i' for true:TrueClass from (irb):4