2015-10-06 67 views
-1

我仍然是新的,這個邏輯flummoxed ..也許我需要更多的咖啡..但是這裏。最好的方法來寫這個邏輯比較三個變量

我有三個值的顏色,大小和材料。我需要將它們分配給數組「選項」。

這些變量有一個值或被賦值爲「nil」。因此,以下將返回true或false爲每個:

color.nil? 
size.nil? 
material.nil? 

如果顏色和大小爲零,然後我想分配給選項的材料的值。這是直截了當:

if color.nil? && size.nil? 
    options = material 
end 

不過,我有麻煩的是,如果顏色或大小不爲零,然後我要分配給那些選項陣列的一個或兩個,而不是在所有使用的材料變量。

這樣做最簡單的方法是什麼?

+0

什麼** **選項,數組或哈希? –

+0

選項是一個數組 – ToddT

+0

你將如何使用該散列? – ToddT

回答

1

我不知道這是處理特定用例場景,但只是回答你的問題的最佳途徑,你可以做這樣的:

if color.nil? && size.nil? 
    options = material 
else 
    options = [color, size].reject(&:nil?) 
end 
+0

完美..謝謝! – ToddT

0

與此代碼:

[color, size, material].compact.first 

你是說,返回第一個不爲null。所以,如果顏色爲空,但大小的值爲4,材質的值爲9,則表達式將返回4.如果顏色和大小爲空,那麼將獲得任何值爲實體的值(如果它具有值)。如果所有值都爲空,則會得到空值。

或另一種方式:

options = color || size || material 
+0

除紅寶石中沒有'null' –

+0

是的,你說得對:D。順便說一句,我仍然相信我把第二個選項看起來比接受的答案更好:-) – fanta

+0

它看起來更好,但它是不正確的。如果顏色和大小都不爲零,則代碼將只選擇顏色。但'[顏色,大小]'是必要的。 –

相關問題