输出方法返回变量值?红宝石

时间:2017-03-10 00:30:03

标签: ruby

有没有办法将方法的输出存储在Ruby中的变量中?例如,如果我想将display_results的返回值存储在要由win_counter评估的变量中,那可能吗?我希望每次display_results获胜时win_counter都会递增。

win_combos = [
  ['rock', 'scissors'],
  ['paper', 'rock'],
  ['scissors', 'paper'],
  ['rock', 'lizard'],
  ['lizard', 'spock'],
  ['spock', 'scissors'],
  ['scissors', 'lizard'],
  ['lizard', 'paper'],
  ['paper', 'spock'],
  ['spock', 'rock']
]

scores = { player: 0, computer: 0 }

def display_results(first, second, combos = [])  
  combos.each do |combo|
    if combo == [first, second]
      puts "Player won!"
      break
    elsif combo == [second, first]
      puts "Computer won!"
      break
    end
  end
  if first == second
    puts "It's a tie!"
  end
end

def win_counter(player, computer, scores)
  if display_results(player, computer)
    scores[:player] = scores[:player] + 1
  elsif display_results(computer, player)
    scores[:computer] = scores[:computer] + 1
  end
  puts "players wins: #{scores[:player]}; computer wins: #{scores[:computer]}"
end

display_results('spock', 'rock', win_combos)
win_counter('spock', 'rock', scores)

1 个答案:

答案 0 :(得分:0)

您需要做的就是设置一个等于方法调用的变量。你可以使用:

charAt()

然而,将打赢胜利者的逻辑与实际游戏的逻辑分开可能更有用。在红宝石方法中,返回布尔值的风格是用''即空? display_results应该只显示游戏的结果,你不应该使用if语句。