我有一个具有以下值的变量:
blah = # 1, 0, or -1
现在我想设置这两个变量:
up
down
根据'blah'的值,为1或0。
如果blah为1,则up = 1且down = 0,如果blah为-1,则down = 1且up = 0
如果blah为0,则两者都为0.
如果检查这么多的红宝石怎么办呢?
答案 0 :(得分:9)
解决方案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], [0, 1]][blah]
答案 1 :(得分:3)
sawa和SirDarius的变体允许blah
大于,小于或等于零,而不仅仅是-1,0或1:
def mapper(x)
h = {
-1 => [0, 1],
0 => [0, 0],
1 => [1, 0]
}
h[x <=> 0]
end
up, down = mapper(blah)
请注意,Fixnum's <=>
operator被指定为返回-1,0或1(当然还是nil
):
返回-1,0,+ 1或nil,具体取决于fix是否小于,等于或大于numeric。
因此,使用<=>
是一种安全的方法来实现Fixnum的signum function。
答案 2 :(得分:2)
根据您的初始规范,以下代码有效:
up = 0
down = -blah
编辑:
以下是使用哈希获得所需结果的创造性方法:
states = { -1 => [0,1], 0 => [0,0], 1 => [1,0] }
up, down = states[blah]
答案 3 :(得分:2)
up = blah == 1 ? 1 : 0
down = blah == -1 ? 1 : 0
答案 4 :(得分:1)
我不认为这是特定于红宝石的...类似
up = blah != -1
down = blah != 1
我认为你的意思是当blah为1时,up应为1。
答案 5 :(得分:1)
另一种方法:
up, down = [0, blah].max, [0, -blah].max
答案 6 :(得分:0)
将两个答案重置为0,然后根据需要进行调整
up, down = 0, 0
up = 1 if blah > 0
down = 1 if blah < 0
答案 7 :(得分:0)
class Integer
def up?
self == 1
end
def down?
self == -1
end
end
x = 1
x.up? # => true