2016-05-12 48 views
4

可以self有沒有評價爲虛假或無?自己可以是虛假的還是零?

例如...

class FooBar 

    ... 

    def check_this 
    self && check_something_else 
    end 
end 

在此條件所必需的self &&

+2

我不這麼認爲,'self &&'可能什麼都不做,在我的書裏總是很有道理。 – jfornoff

+1

不,在這個例子中沒有。在Ruby中,只有'nil'和'false'在布爾/條件表達式中計算爲false。由於'self'是指'FooBar'的一個實例,它不能是'nil'或'false'。 (請注意,這些是單獨類'NilClass'和'FalseClass'的實例)。唯一的例外是,如果你打開'FalseClass'的'NilClass',我認爲你沒有做。 –

+0

@jformoff,意見是沒有幫助的。如果你對你的斷言有爭論,我們希望聽到它。 –

回答

10

是。記住一切都在Ruby是一個對象,以便self是falsy爲falsenil

nil.instance_eval { self } # => nil 
false.instance_eval { self } # => false 
+2

具體而言,*是* falsy的唯一對象是'false'和'nil'。 – Linuxios

+0

你說得對,我在JS/Python的土地上呆了太久。 –

+0

哦。 JS ......有最奇怪的真相/假規則。 – Linuxios

-1

實際上,它不能因爲 - 如果一個對象是無或無 - 因爲它不屬於該類,所以無法調用它。

+4

一般來說,是的,技術上沒有。 – tadman

+0

'nil'('false')是類'NilClass'('FalseClass')的唯一實例。 –

+0

@CarySwoveland ...只要他沒有擴展這個類(不記得它在Ruby中被稱爲什麼),NilClass和FalseClass將不會有他指定的方法。 – user5055454

5

是的,但只有在一些非常奇怪的情況:

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 
+0

你不必走到那個極端;每當接收者爲'false'('nil')時,'self'爲'false'('nil')。 –

+0

@CarySwoveland:我假設你指的是'false.instance_eval {puts self}'之類的東西? – Linuxios

+0

是的,這是一種證明每當接收者「錯誤」時「self」爲false的斷言的方式。 –

2

這裏是一個relevant article通過Avdi格林關於這個問題,顯然這是不可能使一個物體falsy除非在非常奇怪的情況類似追求NilClassfalse我想。

3

不,self在正常代碼中不能爲零或錯誤。

nilfalse是Ruby對象的方法。 self是那些分別nilfalse

def nil.self 
    self 
end 
nil.self 
=> nil 

def false.self 
    self 
end 
false.self 
=> false 

這不正是猴子補丁,它的定義singleton方法,但我敢打賭,這不是你所想的這樣,在常規情況下。

1
class NilClass 
    def selfie 
    self 
    end 
end 

nil.selfie #=> nil 

class FalseClass 
    def selfie 
    self 
    end 
end 

false.selfie #=> false 
+0

我前一段時間給了這個答案,但刪除它,認爲(不正確)它是一樣的另一個答案。 –

相關問題