2013-12-15 38 views
2

在減少塊中通過2個選擇分離邏輯的有效方法是什麼?在減少塊中使用選擇

我的意思是,如果總和等於選擇1,產品,如果選擇等於2

這是我的代碼,但它並不因爲如果選擇等於2,它的工作原理爲唯一選擇1和其他人。

(1..10).reduce(choice == 1 ? :+ : :*) 

如何處理選擇1和選擇2在同一個減少塊?

+0

你的代碼沒有問題 - 它工作正常。等一下,我想知道爲什麼@DigitalRoss會建議一個與您擁有的解決方案相同的解決方案。啊哈!你編輯了你原來的問題。現在你爲什麼要這樣做,只是爲了混淆我們? –

回答

2

差不多工作。您需要:

(1..10).reduce(choice == 1 ? :+ : :*) 

更新:事實證明,真正的問題是一個表達式模板,不會簡單地默認爲標產品的需要。顯然拋出一個異常(當選擇超出範圍)是好的或至少是一個有用的模板佔位符。然後出現幾個表達式:

(1..10).reduce({1 => :+, 2 => :*}[choice]) 
(1..10).reduce([nil, :+, :*][choice]) 
+0

+1,錯過了那一點。 –

+0

是的,但我不想產品,如果選擇相等3 ..它必須工作,只有當選擇等於2 –

+1

你想在*不1和2 *案件發生什麼?如果拋出一個異常,我會這樣做:'(1..10).reduce({1 =>:+,2 =>:*} [choice])'或者這個:'(1..10 ).reduce([nil,:+,:*] [choice])' – DigitalRoss