我正在处理其他人的代码库,我正在尝试破译以下行:
if !foo #<~ this line
...
end
我注意到foo
应该返回false
,但是这个爆炸!方法返回true
。这是否意味着此![var]
业务类似于:
if foo != nil
答案 0 :(得分:3)
这意味着&#34;如果不是foo&#34;,它实际上返回foo
的反面。因此,如果foo = true
,!foo
返回false
,如果foo = false
,则!foo
会返回true
。
答案 1 :(得分:3)
是的,上面的代码表示如果条件(foo)为false则运行代码。我不会说它类似于foo!= nil,它更像!(foo)
,其中foo可以是nil
或false
。
你可以写
if !foo #<~ this line
...
end
作为
unless foo
...
end
但是根据Ruby样式指南,只有代码可以用一行表示时才应使用unless
。
do_something unless foo
答案 2 :(得分:1)
!foo
是
的语法糖foo.!
即。通过评估表达式!
将<{1}}消息发送到返回的对象。
方法foo
在!
中定义,它是documented just like any other method,即使相当简洁:
BasicObject
→!obj
或true
布尔否定。
答案 3 :(得分:0)
在这种情况下!否定其后的价值。在Ruby中,只有false
和nil
被视为虚假值,换句话说,在false
等条件语句中将被视为if
的值。所有其他值(true
,1
,"some-string"
等...)都被认为是真实的(在条件中将被视为true
的值。)
所以!false
是true
。 !nil
是true
。 !true
是false
。