我知道我可以为两个状态之间切换的变量做这样的事情:
num = 0
...
if num == 0
num = 1
else
num = 0
end
但有没有办法可以更好地完成它,也许是这样的:
num = 1 if num == 0 else 0
我知道那不对,只是那样的东西?
(来自这里的python背景)
谢谢!
答案 0 :(得分:3)
您可以使用三元运算符:
num = num == 0 ? 1 : 0
评估为:
conditional ? return_this_if_true : return_this_if_false
答案 1 :(得分:3)
您可以使用三元运算符:
num = num == 0 ? 1 : 0
或者,您可以使用普通的旧if / else,它返回已计算块的值:
num = if num == 0
1
else
0
end
答案 2 :(得分:1)
我应该补充一点,如果你真的在谈论0和1之间的切换,而不是任何两个任意状态,你可以使用num ^= 1
,这是num = num ^ 1
的语法糖,其中^
是二进制xor运算符。
要在true和false之间切换,您当然可以使用val = !val
。
否则,是的,三元运算符是最简洁的形式。
答案 3 :(得分:1)
num = 1 - num
是另一种方式......
答案 4 :(得分:1)
首次设置数组arr
后,您可以使用arr.rotate!.first
arr = [0,1]
arr.rotate!.first #=> 1
arr #=> [1,0]
arr.rotate!.first #=> 0
arr #=> [0,1]
另外使用cycle
arr = [0,1].cycle
arr.next #=> 0
arr.next #=> 1
或者也许可以使用一个枚举器(虽然这可能被认为有点矫枉过正):
def alternator
Enumerator.new do |y|
arr = [0,1]
loop do
y << arr.rotate!.first
end
end
end
alt = alternator
alt.next #=> 1
alt.next #=> 0