使用if / else设置变量

时间:2016-07-10 22:11:24

标签: ruby

我知道我可以为两个状态之间切换的变量做这样的事情:

num = 0
...
if num == 0
    num = 1
else
    num = 0
end

但有没有办法可以更好地完成它,也许是这样的:

num = 1 if num == 0 else 0

我知道那不对,只是那样的东西?

(来自这里的python背景)

谢谢!

5 个答案:

答案 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