应用多个业务规则以使用Scala List操作确定最终结果

时间:2019-06-12 21:47:40

标签: scala functional-programming

在这之后,玩家和发牌人(在二十一点游戏中)将所有卡抽出后,我需要确定谁赢得了游戏。得分最高不超过21的玩家将获胜,如果两人的得分相同,则获胜。

所以我有这个Scala代码:

    def determineWinner(gamer: Gamer, dealer: Dealer): Player = {
      List(gamer, dealer).filter(_.points <= blackJack).maxBy(_.points)
    }

问题:

  • 我们可以改进上面的代码吗?还有更惯用的方法吗?
  • 我如何更改上面的代码以显式地处理两个点相等的情况?

在此处填写代码:conemu + ssh clears console history

1 个答案:

答案 0 :(得分:2)

maxBy显式返回第一个最大值,因此将玩家放在列表中的第一位可确保玩家始终赢得并列。请注意不要使用具有不确定的迭代顺序的集合,例如Set。

我认为这是相当简洁和惯用的代码,除了您不能同时处理两个玩家的失败。我可能会考虑像下面这样使规则更明确一些,但这将是我与同事讨论的一个近距离电话:

if (!busted(gamer) && (gamer.points >= dealer.points || busted(dealer)))
  Some(gamer)
else if (!busted(dealer))
  Some(dealer)
else
  None