可以self
有沒有評價爲虛假或無?自己可以是虛假的還是零?
例如...
class FooBar
...
def check_this
self && check_something_else
end
end
在此條件所必需的self &&
?
可以self
有沒有評價爲虛假或無?自己可以是虛假的還是零?
例如...
class FooBar
...
def check_this
self && check_something_else
end
end
在此條件所必需的self &&
?
實際上,它不能因爲 - 如果一個對象是無或無 - 因爲它不屬於該類,所以無法調用它。
一般來說,是的,技術上沒有。 – tadman
'nil'('false')是類'NilClass'('FalseClass')的唯一實例。 –
@CarySwoveland ...只要他沒有擴展這個類(不記得它在Ruby中被稱爲什麼),NilClass和FalseClass將不會有他指定的方法。 – user5055454
是的,但只有在一些非常奇怪的情況:
irb(main):001:0> def false.test
irb(main):002:1> puts "hello" if !self
irb(main):003:1> end
=> nil
irb(main):004:0> false.test
hello
=> nil
你不必走到那個極端;每當接收者爲'false'('nil')時,'self'爲'false'('nil')。 –
@CarySwoveland:我假設你指的是'false.instance_eval {puts self}'之類的東西? – Linuxios
是的,這是一種證明每當接收者「錯誤」時「self」爲false的斷言的方式。 –
這裏是一個relevant article通過Avdi格林關於這個問題,顯然這是不可能使一個物體falsy除非在非常奇怪的情況類似追求NilClass
或false
我想。
不,self
在正常代碼中不能爲零或錯誤。
nil
和false
是Ruby對象的方法。 self
是那些分別nil
和false
:
def nil.self
self
end
nil.self
=> nil
def false.self
self
end
false.self
=> false
這不正是猴子補丁,它的定義singleton方法,但我敢打賭,這不是你所想的這樣,在常規情況下。
class NilClass
def selfie
self
end
end
nil.selfie #=> nil
class FalseClass
def selfie
self
end
end
false.selfie #=> false
我前一段時間給了這個答案,但刪除它,認爲(不正確)它是一樣的另一個答案。 –
我不這麼認爲,'self &&'可能什麼都不做,在我的書裏總是很有道理。 – jfornoff
不,在這個例子中沒有。在Ruby中,只有'nil'和'false'在布爾/條件表達式中計算爲false。由於'self'是指'FooBar'的一個實例,它不能是'nil'或'false'。 (請注意,這些是單獨類'NilClass'和'FalseClass'的實例)。唯一的例外是,如果你打開'FalseClass'的'NilClass',我認爲你沒有做。 –
@jformoff,意見是沒有幫助的。如果你對你的斷言有爭論,我們希望聽到它。 –