Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
增加一个变量或另一个变量的Ruby条件_Ruby_Ternary Operator_Code Formatting - Fatal编程技术网

增加一个变量或另一个变量的Ruby条件

增加一个变量或另一个变量的Ruby条件,ruby,ternary-operator,code-formatting,Ruby,Ternary Operator,Code Formatting,假设我必须在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" 我尝试使用三元运算符,但我不知道如何将其用于多变量。另外,一份

假设我必须在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]
您可以使用哈希:

@counter = {won: 0, lost: 0, drawn: 0}
result = :won

@counter[result] += 1

@counter
#=> {:won=>1, :lost=>0, :drawn=>0}
我使用了符号作为键,但它也适用于字符串

如果代码的其他部分依赖于
赢得的次数
失去的次数
,则可以将它们作为方法实现:

def times_won
  @counter[:won]
end
关于您的编辑

混合不起作用:

a, b += 1, 2 #=> SyntaxError
必须明确指定计算:

a, b = a + 1, b + 2 # increments `a` by 1 and `b` by 2
当然,您可以用更复杂的表达式替换固定值:

a, b = a + (result == 'won' ? 1 : 0), b + (result == 'lost' ? 1 : 0)
您可以使用哈希:

@counter = {won: 0, lost: 0, drawn: 0}
result = :won

@counter[result] += 1

@counter
#=> {:won=>1, :lost=>0, :drawn=>0}
我使用了符号作为键,但它也适用于字符串

如果代码的其他部分依赖于
赢得的次数
失去的次数
,则可以将它们作为方法实现:

def times_won
  @counter[:won]
end
关于您的编辑

混合不起作用:

a, b += 1, 2 #=> SyntaxError
必须明确指定计算:

a, b = a + 1, b + 2 # increments `a` by 1 and `b` by 2
当然,您可以用更复杂的表达式替换固定值:

a, b = a + (result == 'won' ? 1 : 0), b + (result == 'lost' ? 1 : 0)

即使你的最后一行有效,你能理解它而不需要额外的评论吗?嗯,也许有一段时间不去想它,但是我的主要兴趣是在Ruby中学习新的东西。你可以考虑删除变量<代码> TimeSead >:<代码> GAMESY播放+=1;如果结果=“赢”,则次数=1。然后根据需要计算损失的数量。是的,仍然有两种说法,应该有。一篇现在被删除的帖子展示了如何使用
eval
来满足您的需求。正如你所评论的,“这很好”,我不得不说“这很奇怪”会更贴切。一百万年来,你从未见过
eval
这样使用。我甚至不确定这是不是一个严肃的答案。嵌套三元结构中的错误是,你只是让你的代码可读性变差,从而导致可维护性变差,这意味着更可能导致错误。不要那样做。使用三元组的唯一时间是当它产生简化的代码时,这样就减少了其他两个问题。在Perl中,我们使用的是长篇,但露比不是Perl。即使你的最后一行有效,你能理解它而不需要额外的评论吗?嗯,也许有一段时间不去想它,但我的主要兴趣是在Ruby中学习新的东西。你可以考虑删除变量<代码> TimeSead >:<代码> GAMESY播放+=1;如果结果=“赢”,则次数=1。然后根据需要计算损失的数量。是的,仍然有两种说法,应该有。一篇现在被删除的帖子展示了如何使用
eval
来满足您的需求。正如你所评论的,“这很好”,我不得不说“这很奇怪”会更贴切。一百万年来,你从未见过
eval
这样使用。我甚至不确定这是不是一个严肃的答案。嵌套三元结构中的错误是,你只是让你的代码可读性变差,从而导致可维护性变差,这意味着更可能导致错误。不要那样做。使用三元组的唯一时间是当它产生简化的代码时,这样就减少了其他两个问题。在Perl中,我们会使用长三元组,但Ruby不是Perl。