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

use*_*796 0 ruby code-formatting ternary-operator

让我们说我必须使用Ruby中的变量进行一些游戏

times_won # Any integer
times_lost # Any integer
Run Code Online (Sandbox Code Playgroud)

以及上一轮的结果

result # string, can be: "won", "lost" or "drawn"
Run Code Online (Sandbox Code Playgroud)

什么是更好的方式这样做

times_won += 1 if result == "won"
times_lost += 1 if result == "lost"
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用三元运算符,但我不知道如何将它与多个变量一起使用.案例陈述也不是更好.

也许有人知道一个单行来打扰我的想法.

编辑:

这样的嵌套三元运算符中的Error在哪里?

 times_won,times_lost += result == 'drawn'  ? [0,0] : result =='won' ? [1,0] : [0,1]
Run Code Online (Sandbox Code Playgroud)

Ste*_*fan 5

您可以使用哈希:

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

@counter[result] += 1

@counter
#=> {:won=>1, :lost=>0, :drawn=>0}
Run Code Online (Sandbox Code Playgroud)

我已经使用符号作为键,但它也适用于字符串.

如果你的代码的其他部分依赖于times_wontimes_lost,你可以实现他们的方法:

def times_won
  @counter[:won]
end
Run Code Online (Sandbox Code Playgroud)

关于你的编辑

混合缩写分配多个分配不起作用:

a, b += 1, 2 #=> SyntaxError
Run Code Online (Sandbox Code Playgroud)

您必须明确指定计算:

a, b = a + 1, b + 2 # increments `a` by 1 and `b` by 2
Run Code Online (Sandbox Code Playgroud)

当然,您可以使用更复杂的表达式替换固定值:

a, b = a + (result == 'won' ? 1 : 0), b + (result == 'lost' ? 1 : 0)
Run Code Online (Sandbox Code Playgroud)