7

我刚刚在我的 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 
4

3 回答 3

13

因为0不等于false0是一个整数值,所有整数的布尔值是true. 唯一可以评估的东西falsenil,并且,明确地,false

鉴于0true!0是,直观地,false

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

于 2013-05-11T09:36:11.953 回答
6

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

于 2013-05-11T09:38:37.777 回答
4

这个博客

Ruby 中的大多数对象都有一个布尔值 true。只有两个对象的布尔值为 false,它们是 false 对象本身和 nil 对象。

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

于 2013-05-11T09:40:59.493 回答