我可以在 Ruby case 语句中使用两个变量之间的比较吗?

Nic*_*tti 0 ruby

我正在尝试这段代码,但每次都得到 nil (这是 Black Jack 游戏的简单版本):是因为我在 case 语句中比较两个变量吗?

def end_game_message(player_score, bank_score)
  message = ""
  case player_score
  when player_score == 21
    message = "Black Jack!"
  when player_score > bank_score
    message = "You win!"
  when player_score > 21
    message = "You lose!"
  when player_score < bank_score
    message = "You lose"
  when player_score == bank_score
    message = "Push"
  end
  message
end

puts end_game_message(21, 15)
Run Code Online (Sandbox Code Playgroud)

预先感谢您的任何帮助!

小智 5

IMO,在这种情况下你应该使用if而不是case。但是,如果您想使用case,代码可能如下所示:

def end_game_message(player_score, bank_score)
  case player_score
  when 21
    "Black Jack!"
  when -> s { s > bank_score }
    "You win!"
  when -> s { s > 21 }
    "You lose!"
  when -> s { s < bank_score }
    "You lose"
  when -> s { s == bank_score }
    "Push"
  end
end

puts end_game_message(21, 15)
Run Code Online (Sandbox Code Playgroud)

关键点是给Proc从句赋予when宾语。在本例中,splayer_score(赋予case子句的值)。

(还有一个小的改进:case语句返回值,因此您不必将消息分配给局部变量)