什么`![var_name]`在Ruby中意味着什么?

时间:2015-07-10 03:06:01

标签: ruby syntax operators

我正在处理其他人的代码库,我正在尝试破译以下行:

if !foo #<~ this line
  ...
end

我注意到foo应该返回false,但是这个爆炸!方法返回true。这是否意味着此![var]业务类似于:

if foo != nil  

4 个答案:

答案 0 :(得分:3)

这意味着&#34;如果不是foo&#34;,它实际上返回foo的反面。因此,如果foo = true!foo返回false,如果foo = false,则!foo会返回true

答案 1 :(得分:3)

是的,上面的代码表示如果条件(foo)为false则运行代码。我不会说它类似于foo!= nil,它更像!(foo),其中foo可以是nilfalse

你可以写

if !foo #<~ this line
  ...
end

作为

unless foo
  ...
end

但是根据Ruby样式指南,只有代码可以用一行表示时才应使用unlessdo_something unless foo

答案 2 :(得分:1)

!foo

的语法糖
foo.!

即。通过评估表达式!将<{1}}消息发送到返回的对象。

方法foo!中定义,它是documented just like any other method,即使相当简洁:

  

BasicObject!objtrue

     

布尔否定。

答案 3 :(得分:0)

在这种情况下!否定其后的价值。在Ruby中,只有falsenil被视为虚假值,换句话说,在false等条件语句中将被视为if的值。所有其他值(true1"some-string"等...)都被认为是真实的(在条件中将被视为true的值。)

所以!falsetrue!niltrue!truefalse