【发布时间】:2015-04-05 11:14:41
【问题描述】:
假设我必须在 Ruby 中为一个小游戏设置变量
times_won # Any integer
times_lost # Any integer
以及上一轮的结果
result # string, can be: "won", "lost" or "drawn"
有什么更好的方法来做到这一点
times_won += 1 if result == "won"
times_lost += 1 if result == "lost"
我正在尝试使用三元运算符,但我不知道如何将它与多个变量一起使用。案例陈述也不是很好。
也许有人知道一个让我大吃一惊的单行字。
编辑:
这样的嵌套三元运算符中的错误在哪里?
times_won,times_lost += result == 'drawn' ? [0,0] : result =='won' ? [1,0] : [0,1]
【问题讨论】:
-
即使你的最后一行有效,如果没有额外的评论你能理解吗?
-
好吧,也许不是没有考虑过一段时间,但我的主要兴趣是学习 ruby 中的新东西。
-
您可以考虑删除变量
times_lost:games_played += 1; times_won += 1 if result == "won"。然后根据需要计算损失的数量。是的,仍然有两个语句,应该有。 -
一篇现已删除的帖子展示了如何使用
eval来满足您的要求。正如您评论的那样,“这很好”,我不得不说“这很奇怪”会更贴切。一百万年来你永远不会看到eval被这样使用。我什至不确定这是一个严肃的答案。 -
嵌套三元组中的错误是您只是使代码的可读性降低,这意味着可维护性降低,这意味着更有可能导致错误。不要那样做。 ONLY 时间使用三元是当它导致简化代码时,然后减少其他两个问题。在 Perl 中,我们会使用长三元组,但 Ruby 不是 Perl。
标签: ruby ternary-operator code-formatting