2017-03-10 63 views
-1

有没有办法将方法的输出存储在Ruby中的变量?例如,如果我想将display_results的返回值存储在一个由win_counter评估的变量中,那可能吗?我希望win_counter在每次display_results都有赢家时增加。输出方法返回值到变量?红宝石

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) 

回答

0

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

if display_results(player, computer) == "Player won!" 

但是,将打印赢家的逻辑分离为实际游戏的逻辑可能更有用。在返回布尔值的ruby方法中,使用'?'即空? display_results应该只显示游戏的结果,你不应该使用if语句。