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