在Ruby中,为什么会这样!nil return =>真正?

时间:2012-01-26 18:06:37

标签: ruby object null

如果你这样做:

    $ nil
    => nil

但如果你这样做:

    $ !nil
    => true

为什么!nil是真的吗?

3 个答案:

答案 0 :(得分:13)

当您在Ruby中的对象上使用类似!的布尔运算符时,必须首先将对象在后台转换为布尔值(truefalse)。 Ruby中的每个对象都是“truthy”或“falsy”,Ruby的实现者选择nil为假,因此!nil等同于!false,其值为{{1} }}

答案 1 :(得分:4)

!运算符是一元布尔值NOT。如果其操作数为truenil,则会返回false。否则它将返回false

!nil # => true
!false # => true
!Object.new # => false 

在布尔表达式中,Ruby始终将nilfalse视为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),它就会变为假。