!在轨道中0为假.为什么?

Kar*_*rma 7 ruby

我刚刚在rails应用程序中遇到了一个令人不安的错误,我发现问题是!0是错误的.我在假设,那应该是真的.

我的印象是!运算符将反转整数中的位,因此0将变为全1,因此将为真.

事实并非如此,为什么?

还要注意rails控制台:

1.9.3p286 :002 > !0
 => false 
1.9.3p286 :003 > 0
 => 0 
1.9.3p286 :004 > !1
 => false 
1.9.3p286 :005 > !!0
 => true 
1.9.3p286 :006 > !0
 => false 
1.9.3p286 :007 > !23
 => false 
Run Code Online (Sandbox Code Playgroud)

Ant*_*t P 14

因为0不等同于false.0是一个整数值,所有整数的布尔值是true.评估的唯一事情falsenil,明确地,false.

鉴于0true,!0是的,直观的,false.

!不是一个有点明智的运营商,这是合乎逻辑的NOT.也许你的意思~0


Ere*_*bih 6

在ruby中,逻辑表达式中只有两个值为false的值:false和nil.由于0既不是它们,它的计算结果为true,因此!true等于false.