我知道我可以为两种状态之间切换的可变做这样的事情:设置一个变量的if/else
num = 0
...
if num == 0
num = 1
else
num = 0
end
,但有什么办法,我可以做更多好听,也许是东西像这样:
num = 1 if num == 0 else 0
我知道那是不对的,但只是类似的东西?
(来自这里的蟒蛇背景)
谢谢!!
我知道我可以为两种状态之间切换的可变做这样的事情:设置一个变量的if/else
num = 0
...
if num == 0
num = 1
else
num = 0
end
,但有什么办法,我可以做更多好听,也许是东西像这样:
num = 1 if num == 0 else 0
我知道那是不对的,但只是类似的东西?
(来自这里的蟒蛇背景)
谢谢!!
您可以使用三元运算:
num = num == 0 ? 1 : 0
计算结果为:
conditional ? return_this_if_true : return_this_if_false
我对这些很熟悉,一定会掉以轻心。谢谢! –
您可以使用三元运算符:
num = num == 0 ? 1 : 0
或者,你可以使用普通旧if/else,它返回评估块的值:
num = if num == 0
1
else
0
end
我要补充,如果你真的在谈论0和1之间的切换具体的,而不是任意的两个状态,你可以只使用num ^= 1
,这是语法糖num = num^1
,其中^
是一个二进制xor操作符。
对于真假,你当然可以用val = !val
切换。
否则,是的,三元运算符是最简洁的形式。
num = 1 - num
是另一种方式......
后首先设置一个数组arr
可以使用arr.rotate!.first
arr = [0,1]
arr.rotate!.first #=> 1
arr #=> [1,0]
arr.rotate!.first #=> 0
arr #=> [0,1]
Alternaively使用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
欢迎堆栈溢出。由于你的问题没有显示任何研究或努力,你会得到低估。这在堆栈溢出和互联网上多次报道。请阅读“[问]”,包括链接的页面,以及http://meta.stackoverflow.com/q/261592/128421。 –