我处理别人的代码库,而我试图破译以下行:在Ruby中``[var_name]`是什么意思?
if !foo #<~ this line
...
end
我注意到,foo
应该返回false
,但与此砰!方法它返回true
。这是否意味着这![var]
业务类似于说:
if foo != nil
我处理别人的代码库,而我试图破译以下行:在Ruby中``[var_name]`是什么意思?
if !foo #<~ this line
...
end
我注意到,foo
应该返回false
,但与此砰!方法它返回true
。这是否意味着这![var]
业务类似于说:
if foo != nil
是的,上述代码意味着如果条件(foo)为假,则运行代码。我不会说它类似于foo!= nil,它更像!(foo)
,其中foo可以是nil
或false
。
你可以写
if !foo #<~ this line
...
end
为
unless foo
...
end
但按照Ruby的风格指南,你应该使用unless
,只有当代码可以在一行表示。 do_something unless foo
这意味着“如果不富”,它有效地返回foo
相反。因此,如果foo = true
,!foo
返回false
,并且如果foo = false
,!foo
返回true
。
在这种情况下!否定其后面的价值。在Ruby中,只有false
和nil
被视为falsy值,换句话说,在if
等条件语句中将被视为false
。所有其他值(true
,1
,"some-string"
等)被认为是真实的(在条件中将被视为true
的值)。
所以!false
,是true
。 !nil
是true
。 !true
是false
。
!foo
为
foo.!
即发送该消息!
由计算表达式foo
返回的对象语法糖。
方法!
在BasicObject
定义,并且它是documented just like any other method,即使相当简洁:
!obj
→true
或false
布尔否定。
明白了。谢谢! –
更确切地说,'!foo'相当于'foo!= nil && foo!= false'(只要'foo。!=“和'foo。!@'都没有被重新定义)。 – Amadan