我有一個變量,該變量具有以下值:如何設置2個變量爲1或0根據第三變量看重
blah = # 1, 0, or -1
現在我要設置這兩個變量:
up
down
根據'blah'的值爲1或0。
如果嗒嗒爲1,則高達= 1和向下= 0,如果是嗒嗒-1然後向下= 1和高達= 0
如果嗒嗒爲0,則兩者都爲0。
如何你可以做這個紅寶石的方式沒有太多,如果檢查?
我有一個變量,該變量具有以下值:如何設置2個變量爲1或0根據第三變量看重
blah = # 1, 0, or -1
現在我要設置這兩個變量:
up
down
根據'blah'的值爲1或0。
如果嗒嗒爲1,則高達= 1和向下= 0,如果是嗒嗒-1然後向下= 1和高達= 0
如果嗒嗒爲0,則兩者都爲0。
如何你可以做這個紅寶石的方式沒有太多,如果檢查?
溶液1
up, down =
case blah
when 1; [1, 0]
when 0; [0, 0]
when -1; [0, 1]
end
溶液2(由畝啓發太短)
up, down = [[0, 0], [1, 0], [0, 1]][blah]
根據您的初始規範,下面的代碼工作:
up = 0
down = -blah
編輯:
下面是一個使用哈希來達到預期的效果,創造性地:
states = { -1 => [0,1], 0 => [0,0], 1 => [1,0] }
up, down = states[blah]
這是爲什麼在軟件開發中需要一個好的規範的證明:) – SirDarius 2011-06-13 16:40:43
我不認爲這是紅寶石專用的...像
up = blah != -1
down = blah != 1
我假設你的意思是向上應爲1時等等是1
'!='將返回布爾值,他希望整數 – 2011-06-13 16:42:05
好吧,很好;所以'up =(blah == -1?0:1)'; 'down =(blah == 1?0:1)'。雖然我不相信他真的**想要整數......這究竟是什麼目的? – 2011-06-13 16:43:56
老實說,我希望我知道,他可能需要整數,但規範是如此模糊 – 2011-06-13 16:45:34
up = blah == 1 ? 1 : 0
down = blah == -1 ? 1 : 0
將兩個答案重置爲0,然後根據需要進行調整
up, down = 0, 0
up = 1 if blah > 0
down = 1 if blah < 0
澤的和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
當然):
根據fix是小於,等於還是大於數值返回-1,0,+1或零。
因此使用<=>
是實現Fixnum的signum function的安全方法。
我明白了。我明白了你的意思。 – sawa 2011-06-13 17:24:16
class Integer
def up?
self == 1
end
def down?
self == -1
end
end
x = 1
x.up? # => true
另一種方式來做到這一點:
up, down = [0, blah].max, [0, -blah].max
是'有史以來up'任何其他比0? – 2011-06-13 16:37:22
據此,up總是0。當'blah'爲'1'時,爲什麼'up'是0? **編輯** @Jordan先到那裏 – 2011-06-13 16:38:52
當'blah == -1'時'up'是什麼?當'blah == 1'時什麼是'down'? – sawa 2011-06-13 16:45:15