2012-09-20 136 views

回答

9

您可以,但不是您使用它的方式。您可能需要使用的各部分的整個布爾表達式:

if @number == "jack" || @number == "queen" || @number == "king" 

,或者你可以把它簡單的通過檢查一個數組的內容:

if ["jack", "queen", "king"].include?(@number) 
+1

甚至easier-要寫:'如果%w {傑克王后王} .include?(@編號)' – mhutter

5

應該之前評估的括號組的東西其他事情。所以,上面的說,評估:

("jack" || "queen" || "king") 

並返回結果。讓我們試着在IRB:

irb(main):004:0> ("jack" || "queen" || "king") 
=> "jack" 

由於「傑克」是truthy沒有必要看名單和「傑克」的其餘部分被返回。

只要@number等於「jack」,但對其他值不會太大,這將工作得很好。您想比較每個值的@number,直到您匹配或耗盡列表。見@的

(@number == "jack") || (@number == "queen") ... 
+0

我可能會開始使用「truthy」這個詞。 –

+1

是的,在一個布爾上下文中,它的行爲就好像它是真的,它的類真的是TrueClass,但它實際上並不嚴格地講真實,所以真實。 –

2

這是一個有效的Ruby代碼片段PinneyM的答案,但它不會做你認爲它的作用:它首先對

("jack" || "queen" || "king") 

,其評價爲「千斤頂」,因爲這是第一個非false/nil值。然後,它比較@card到這一點,所以你的代碼就相當於

def value 
    if @number == 'jack' 
    10 
    else 
    @number.to_i 
    end 
end 

你可以反過來(@number == 'jack') || (@number == 'queen') ||...比較每個,你可以使用%w(jack queen king).include?(@number)或者你可以使用一個case語句:

def value 
    case @number 
    when 'jack', 'queen', 'king' 
    10 
    else 
    @number.to_i 
    end 
end 
+0

你最後我最終在底部使用了你的def value case例子。有效。謝謝 – Edmund

相關問題