2015-07-10 59 views
1

我处理别人的代码库,而我试图破译以下行:在Ruby中``[var_name]`是什么意思?

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

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

if foo != nil 

回答

3

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

你可以写

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

unless foo 
    ... 
end 

但按照Ruby的风格指南,你应该使用unless,只有当代码可以在一行表示。 do_something unless foo

+0

明白了。谢谢! –

+0

更确切地说,'!foo'相当于'foo!= nil && foo!= false'(只要'foo。!=“和'foo。!@'都没有被重新定义)。 – Amadan

3

这意味着“如果不富”,它有效地返回foo相反。因此,如果foo = true,!foo返回false,并且如果foo = false,!foo返回true

0

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

所以!false,是true!niltrue!truefalse

1
!foo 

foo.! 

即发送该消息!由计算表达式foo返回的对象语法糖。

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

!objtruefalse

布尔否定。