0

じゃんけんプログラムを作成しようとしていますが、これまでのところこのコードは機能しますが、引数がスローされません。これを修正するにはどうすればよいですか?

class RockPaperScissors

  # Exceptions this class can raise:
  class NoSuchStrategyError < StandardError ; end

  def self.winner(player1, player2)
    p1c = player1.last.downcase
    p2c = player2.last.downcase
    p1wins = false

    case p1c
      when "p"
        if (p2c == "p" or p2c == "r")
          p1wins = true
        end 
      when "s"
        if (p2c == "p" or p2c == "s")
          p1wins = true
        end
      when "r"
        if (p2c == "r" or p2c == "s")
          p1wins = true
        end
      else
        raise NoSuchStrategyError, "Strategy must be one of R,P,S" 
    end
  end

エラーがスローされないのはなぜですか?編集*

これは、rspec を使用してコードをテストするために使用されます。これは、Name の後に選択したものを大文字にした配列であることがわかります。

before(:each) do
@rock = ['Armando','R'] ; @paper = ['Dave','P'] ; @scissors = ['Sam','S']
end
describe 'game' do
it 'rock breaks scissors' do
  RockPaperScissors.winner(@rock, @scissors).should == @rock
end
it 'scissors cut paper' do
  RockPaperScissors.winner(@paper, @scissors).should == @scissors
end
it 'paper covers rock' do
  RockPaperScissors.winner(@rock, @paper).should == @paper
end
it 'first player wins if both use same strategy' do
  RockPaperScissors.winner(@scissors, ['Dave','S']).should == @scissors
end
end
it "should raise NoSuchStrategyError if strategy isn't R, P, or S" do
lambda { RockPaperScissors.winner(@rock, ['Dave', 'w']) }.
  should raise_error(RockPaperScissors::NoSuchStrategyError,
  "Strategy must be one of R,P,S")
end
4

1 に答える 1