问题描述
|
我有一个变量,它将具有以下值:
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