rubyの0がtrueな件

公開日: : Ruby

記事内に広告を含む場合があります。記事内で紹介する商品を購入することで、当サイトに売り上げの一部が還元されることがあります。


nishiohirokazu 2008/04/21 14:10
Rubyで0がtrueなのは他の言語から来た人にとってはまりポイントの一つかもしれません。

はい、はまりました。笑。

C言語は0以外がtrueで*1、Javaは判定文の評価式にbooleanしか許可しないんでしたっけ?駄目だ、うろ覚え…。


irb(main):001:0> p "exec" if nil
=> nil
irb(main):002:0> p "exec" if 0
"exec"
=> nil
irb(main):003:0> p "exec" if 1
"exec"
=> nil
irb(main):004:0> p "exec" if true
"exec"
=> nil
irb(main):005:0> p "exec" if false
=> nil
irb(main):006:0> p "exec" if "hello"
(irb):6: warning: string literal in condition
"exec"
=> nil
irb(main):007:0> p "exec" if "hello" == "hello"
"exec"
=> nil
irb(main):008:0> p "exec" if "hello" == "Hello"
=> nil
irb(main):009:0> p "hello" == "Hello"
false
=> nil
irb(main):010:0> p "hello" == "hello"
true
=> nil

なんかまだ違和感あるなあ…。

この後、Rubyのソースをのぞいてみた。eval.cのrb_eval(self, n)あたり。


case NODE_LIT:
result = node->nd_lit;
break;

この周辺で0をtrueと評価してるのかな?後で色々書き換えて実行して追っかけてみるか。

*1:ちょいと訂正。C言語の場合はboolean型が無かったはず。trueやfalseもない。ifなどの評価式では0か非0かで判定されたはず。

関連記事

サンフランシスコのピア39にあるチャウダーズでクラムチャウダーを食す!

lolipop アップルの開発者向けイベント「WWDC2014」

ミスドのカルピスドーナツとカルピスポンデリングを食べてみた!

ミスドで期間限定のカルピスコラボ商品「カルピスドーナツ」と「カルピ

十三カレー計画で牛すじカレーネギのせを食す!(大阪・十三)

「iPhoneアプリ開発キャンプ@大阪」のランチで、十三カレー計画

大阪・難波の加寿屋 法善寺でかすうどんを食す。ランチタイムはおにぎり2個まで無料!

大阪・難波の加寿屋 法善寺 (かすうどん KASUYA)で、かす

ライブドアブログで運営していた「あきお商店」を「卵は世界である」に改名しました

少し前からライブドアブログで「あきお商店」というブログをやって

→もっと見る

PAGE TOP ↑