2016-11-07 46 views
1

我使用的教程,它有一個條件是這樣的:使用Ruby布爾值,如果沒有平等語句,你在檢查什麼?

if Restaurant.method1 
    puts "XXX" 
elsif Restaurant.method2 
    puts "YYY" 
end 

這兩種方法返回的truefalse一個布爾值。同樣,對於變量,我見過類似的東西:

if x 
    puts "XXX" 
else 
    puts "YYY" 
end 

我想知道你到底是爲考慮,有沒有平等運算符(==)或賦值運算符(=)檢查?必須有某種平等檢查,可能被Ruby的簡單化本質隱藏起來,因爲我在邏輯上認爲這是我的頭腦,「If x」和「如果Restaurant.method」都沒有任何意義沒有某種檢查的條件。

+0

完全一樣的東西。在'if Restaurant.method1'中檢查調用方法'method1'的返回值是否爲真,在'if 2 == 3'中,它檢查調用方法'=='的返回值是否爲真,in '如果'a'<='b',它會檢查調用方法'<='的返回值是否真實。爲什麼這個方法的名字會有什麼不同? –

+0

我想知道你到底在檢查什麼。如果沒有'== true'(我相信這就是truthy的意思),如果x/method名字沒有,那麼就沒有辦法直觀地知道該怎麼辦。 – developer098

+0

但'=='只是一個方法,*完全像'method1'。兩者之間沒有區別,除了名字。那麼,爲什麼兩件事情完全一樣呢?爲什麼在一個'if'表達式的條件中調用一個方法與調用另一個方法有什麼不同?在'a == b'的情況下,檢查調用'=='方法的返回值的真實性。在'a.foo(b)'的情況下,檢查調用'foo'方法的返回值的真實性。 –

回答

5

這是編程中的常用範例,而不是Ruby抽象。你在檢查是否真的有問題。特別是在紅寶石中,除了falsenil之外,一切都是真實的。試一試在你的控制檯,如果你要測試的這款:

!!1 # => true 
!!0 # => true 
!![] # => true 
!!{} # => true 

...等,而

!!false # => false 
!!nil # => false 

重要提示:這僅僅是對Ruby的情況。其他語言有不同的規則。例如,在某些語言中,0是虛假的。學習新語言時儘早學習這些很重要。

+1

哦,那麼在兩種情況下,它都在評估Restaurant.method和x是否爲真?對於Restaurant.method,看看它是否通過返回值返回true,對於x,看看它是否被設置爲其他任何東西,而不是false和nil? – developer098

+1

無論是真實的,不是「真實的」(但「真實的」也是真實的)。例如'true == 0#=> false'。 「0」不是真的,它是真實的,意思是說,如果通過if語句,三元運算符等強制執行,它會評估爲真。這在Ruby中不太麻煩,因爲在腳下拍攝自己很難2個虛假值。採取JavaScript在一些事情是虛假的,你會遇到一些麻煩。 – Damon

+1

哈哈......「truthy」對......哈哈,這很有趣,但是......好吧...... truthy =不是假的或者沒有falsy =零或者是false ......得到它謝謝! – developer098

1

Ruby有「truthy」語句。這意味着多種事物可以評估爲真。 Ruby中的所有內容都是真實的,除非爲零。