如果你这样做:
$ nil
=> nil
但如果你这样做:
$ !nil
=> true
为什么!nil是真的吗?
答案 0 :(得分:13)
当您在Ruby中的对象上使用类似!
的布尔运算符时,必须首先将对象在后台转换为布尔值(true
或false
)。 Ruby中的每个对象都是“truthy”或“falsy”,Ruby的实现者选择nil
为假,因此!nil
等同于!false
,其值为{{1} }}
答案 1 :(得分:4)
!
运算符是一元布尔值NOT。如果其操作数为true
或nil
,则会返回false
。否则它将返回false
。
!nil # => true
!false # => true
!Object.new # => false
在布尔表达式中,Ruby始终将nil
和false
视为false
,将所有其余值视为true
。
答案 2 :(得分:1)
因为通常比较,nil被视为 false ,所以,如果你这样做:
if something_that_returns_nil
puts "did not return nil"
else
puts "returned nil"
如果它是:
,你会期望它具有反向行为if !something_that_returns_nil
puts "did return nil"
else
puts "did not return nil"
所以,当你“反转”为零时,由于没有一个特定的对象代表 not_being_nil (因为Ruby中的任何值都不是nil),它就会变为假。