在 Ruby 中,为什么 !nil 返回 => true?



如果你这样做:

    $ nil
    => nil

但是,如果您这样做:

    $ !nil
    => true

为什么是真的?

当您在 Ruby 中的对象上使用布尔运算符(如 !(时,必须首先在后台将对象转换为布尔值(truefalse (。Ruby 中的每个对象要么是"真实的",要么是"伪造的",Ruby 的实现者选择了nil是伪造的,所以!nil等价于 !false ,其计算结果为 true

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

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

在布尔表达式中,Ruby 始终将nilfalse视为false,并将所有其余值视为true

因为一般来说,比较,nil 被认为是错误的,所以,如果你这样做:

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"

因此,当你"反转"nil 时,它会变成 false,因为没有一个特定的对象来表示not_being_nil(因为在 Ruby 中不是 nil 的任何值(。

最新更新