嗨我想使用Ruby製作二十一點遊戲,並試圖使圖片卡的值全部= 10。可以使用下面的代碼來完成此操作嗎? (這一切都發生在我的Card
類中)Ruby:我可以在一個語句中多次使用「或」(||)嗎?
def value
if @number == ("jack" || "queen" || "king")
10
else
@number.to_i
end
end
嗨我想使用Ruby製作二十一點遊戲,並試圖使圖片卡的值全部= 10。可以使用下面的代碼來完成此操作嗎? (這一切都發生在我的Card
類中)Ruby:我可以在一個語句中多次使用「或」(||)嗎?
def value
if @number == ("jack" || "queen" || "king")
10
else
@number.to_i
end
end
您可以,但不是您使用它的方式。您可能需要使用的各部分的整個布爾表達式:
if @number == "jack" || @number == "queen" || @number == "king"
,或者你可以把它簡單的通過檢查一個數組的內容:
if ["jack", "queen", "king"].include?(@number)
應該之前評估的括號組的東西其他事情。所以,上面的說,評估:
("jack" || "queen" || "king")
並返回結果。讓我們試着在IRB:
irb(main):004:0> ("jack" || "queen" || "king")
=> "jack"
由於「傑克」是truthy沒有必要看名單和「傑克」的其餘部分被返回。
只要@number等於「jack」,但對其他值不會太大,這將工作得很好。您想比較每個值的@number,直到您匹配或耗盡列表。見@的
(@number == "jack") || (@number == "queen") ...
我可能會開始使用「truthy」這個詞。 –
是的,在一個布爾上下文中,它的行爲就好像它是真的,它的類真的是TrueClass,但它實際上並不嚴格地講真實,所以真實。 –
這是一個有效的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
你最後我最終在底部使用了你的def value case例子。有效。謝謝 – Edmund
甚至easier-要寫:'如果%w {傑克王后王} .include?(@編號)' – mhutter