我刚刚在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
答案 0 :(得分:13)
因为0
不等同于false
。 0
是一个整数值,所有整数的布尔值为true
。评估为false
的唯一内容是nil
,明确地false
。
鉴于0
为true
,!0
直观地为false
。
!
不是按位运算符,它是逻辑NOT
。也许你的意思是~0
?
答案 1 :(得分:6)
在ruby中,逻辑表达式中只有两个值为false的值:false和nil。 由于0既不是它们,它的计算结果为true,因此!true等于false。
答案 2 :(得分:3)
Ruby中的大多数对象的布尔值都为true。只有两个 对象的布尔值为false,这些是false对象 本身和零对象。
所以任何整数(偶数0)都有一个布尔值true
。因此!0
评估为false