让我们说我必须使用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]
答案 0 :(得分:5)
您可以使用哈希:
@counter = {won: 0, lost: 0, drawn: 0}
result = :won
@counter[result] += 1
@counter
#=> {:won=>1, :lost=>0, :drawn=>0}
我已经使用符号作为键,但它也适用于字符串。
如果您的代码的其他部分依赖times_won
和times_lost
,您可以将它们实现为方法:
def times_won
@counter[:won]
end
关于您的修改
混合abbreviated assignment和multiple assignment不起作用:
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)