如何基于第三个变量值将2个变量设置为1或0

问题描述

| 我有一个变量,它将具有以下值:
blah = # 1,or -1
现在,我要设置这两个变量:
up

down
根据\'blah \'的值等于1或0。 如果blah为1,则up = 1且down = 0;如果blah为-1,则down = 1且up = 0 如果blah为0,则两者均为0。 如果检查的话,怎么能没有很多红宝石呢?     

解决方法

        解决方案1
up,down =
case blah
when 1; [1,0]
when 0; [0,0]
when -1; [0,1]
end
解决方案2(受mu启发太短)
up,down = [[0,0],[1,[0,1]][blah]
    ,        锯齿和SirDarius的变体,它允许
blah
大于,小于或等于零,而不仅仅是-1、0或1:
def mapper(x)
    h = {
        -1 => [0,1],0 => [0,1 => [1,0]
    }
    h[x <=> 0]
end

up,down = mapper(blah)
请注意,将Fixnum \的
<=>
运算符指定为返回-1、0或1(当然也返回
nil
):   根据修订是否小于,等于或大于数字,返回-1、0,+ 1或nil。 因此,使用
<=>
是实现Fixnum的signum函数的安全方法。     ,        根据您的初始规范,以下代码有效:
up = 0
down = -blah
编辑: 这是一种使用哈希实现理想结果的创新方法:
states = { -1 => [0,0] }
up,down = states[blah]
    ,        
up = blah == 1 ? 1 : 0
down = blah == -1 ? 1 : 0
    ,        我不认为这是特定于红宝石的...类似
up = blah != -1
down = blah != 1
我假设您的意思是当blah为1时up应该为1。     ,        还有另一种方法:
up,down = [0,blah].max,-blah].max
    ,        将两个答案都重置为0,然后根据需要进行调整
up,down = 0,0
up = 1 if blah > 0
down = 1 if blah < 0
    ,        
class Integer
  def up?
    self == 1
  end

  def down?
    self == -1
  end
end

x = 1
x.up? # => true