2015-07-10 90 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

布爾否定。