あるあるな判定処理を書こうとしてハマってしまった...
irb(main):001:0> a = true
=> true
irb(main):002:0> p "foo" if a
"foo"
=> "foo"
irb(main):003:0> a = false
=> false
irb(main):004:0> p "foo" if a
=> nil
うん、ここまでは当たり前。パーフェクト。
で、ハマったのは次のやつ
irb(main):005:0> a = 1
=> 1
irb(main):006:0> p "foo" if a
"foo"
=> "foo"
irb(main):007:0> a = 0
=> 0
irb(main):008:0> p "foo" if a
"foo"
=> "foo"
irb(main):009:0>
・・・え?0でもifでtrueになるの?
PHPと比べてみる
php > $a = 1;
php > if ($a) { echo "foo"; }
foo
php > $a = 0;
php > if ($a) { echo "foo"; }
php >
うん、PHPだと 0 は false と同じような扱い。
だけど、Rubyだと 0 は 0 であって false ではないので、判定式にそのまま埋め込んじゃダメ。
・・・LLなのに妙なところで型に厳しいな...。