我處理別人的代碼庫,而我試圖破譯以下行:在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