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

时间:2013-05-11 09:32:14

标签: 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 

3 个答案:

答案 0 :(得分:13)

因为0不等同于false0是一个整数值,所有整数的布尔值为true。评估为false的唯一内容是nil,明确地false

鉴于0true!0直观地为false

!不是按位运算符,它是逻辑NOT。也许你的意思是~0

答案 1 :(得分:6)

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

答案 2 :(得分:3)

来自this blog

  

Ruby中的大多数对象的布尔值都为true。只有两个   对象的布尔值为false,这些是false对象   本身和零对象。

所以任何整数(偶数0)都有一个布尔值true。因此!0评估为false