こんにちは私はRubyを使用してブラックジャックゲームを作成しようとしており、絵カードの値をすべて= 10にしようとしています。これを実現するために以下で使用するコードを使用しても大丈夫ですか?(これはすべて私のCard
クラスで起こっています)
def value
if @number == ("jack" || "queen" || "king")
10
else
@number.to_i
end
end
こんにちは私はRubyを使用してブラックジャックゲームを作成しようとしており、絵カードの値をすべて= 10にしようとしています。これを実現するために以下で使用するコードを使用しても大丈夫ですか?(これはすべて私のCard
クラスで起こっています)
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"
「jack」は真実であるため、リストの残りを見る必要はなく、「jack」が返されます。
これは、@number が「jack」と等しい限り問題なく機能しますが、他の値ではそうではありません。一致するか、リストを使い果たすまで、@number を各値と比較します。@PinneyMの回答を参照してください
(@number == "jack") || (@number == "queen") ...
これは有効な Ruby スニペットですが、あなたが思っているようなことはしません: 最初に評価します
("jack" || "queen" || "king")
これは、最初の非 false/nil 値であるため、「jack」と評価されます。次に、これと比較@card
するため、コードは次と同等です
def value
if @number == 'jack'
10
else
@number.to_i
end
end
それぞれを順番に比較したり、使用したり、case ステートメントを(@number == 'jack') || (@number == 'queen') ||...
使用したりできます。%w(jack queen king).include?(@number)
def value
case @number
when 'jack', 'queen', 'king'
10
else
@number.to_i
end
end