2

こんにちは私はRubyを使用してブラックジャックゲームを作成しようとしており、絵カードの値をすべて= 10にしようとしています。これを実現するために以下で使用するコードを使用しても大丈夫ですか?(これはすべて私のCardクラスで起こっています)

def value
  if @number == ("jack" || "queen" || "king")
    10
  else
    @number.to_i
  end
end
4

3 に答える 3

9

できますが、使用方法は異なります。各部分でブール式全体を使用する必要があります。

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

または、配列の内容を確認することで簡単にすることができます。

if ["jack", "queen", "king"].include?(@number)
于 2012-09-20T15:27:27.073 に答える
5

括弧は、他のものより前に評価されるべきものをグループ化します。したがって、上記は次のように評価します。

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

結果を返します。irb で試してみましょう:

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

「jack」は真実であるため、リストの残りを見る必要はなく、「jack」が返されます。

これは、@number が「jack」と等しい限り問題なく機能しますが、他の値ではそうではありません。一致するか、リストを使い果たすまで、@number を各値と比較します。@PinneyMの回答を参照してください

(@number == "jack") || (@number == "queen") ...
于 2012-09-20T15:29:12.767 に答える
2

これは有効な 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
于 2012-09-20T15:30:59.763 に答える