我試圖在ruby中編寫一個總結參數的函數,但是,如果任何參數爲空,它將跳過該參數並繼續(除非所有值都爲零,其中情況下,將返回nil)添加可能沒有值
的問題是參數本身正在以這樣的方式,他們的評估可能會導致零錯誤發送(即輸入是一樣的東西「2-NIL」)。如果發生這種情況,我不希望它中斷,但繼續添加。
換句話說,添加所有參數,如果參數中有零值或無錯誤,請跳過它並繼續添加。
所以我想出了兩個可能的解決方案。
延遲評估的參數,用引號屏蔽它們並在函數中對它們進行評估,以便我可以捕獲這些錯誤並繼續處理參數。然而,這種屏蔽相當混亂,並且嵌套引號特別混亂。我想知道是否有更簡單的方法來延遲參數的評估?
本地覆蓋/創建nilclass的加法,減法等方法,使參數中的那些錯誤不會導致錯誤,而是產生nil。但是我不確定如何爲nilclass重寫/創建這些方法,更不用說將其用途限制在整個項目中。
如果任何人有任何對這些選項或任何其他選項的深入瞭解,這將是一個很大的幫助!
編輯:一個例子的輸入可能是
bob = 2
fred = 3
tom = nil
john = nil
sum(bob, fred+tom, john) => 2
由於導致零佛瑞德+湯姆原因和錯誤,我想其中。
目前我的解決辦法是
def sum(*vals)
sum = nil
vals.each do |val|
begin
value = eval(val)
unless value.nil?
sum.nil? ? sum = value : sum += value
end
rescue TypeError, NoMethodError
nil
end
end
sum
end
sum('bob', 'fred+tom', 'john') => 2
不過,我想不會有屏蔽每個輸入
你能詳細說明可能的輸入嗎?你說「有點像'2-nil'」,但我不確定你在那裏說什麼。那是「兩減零嗎?「 –
這個問題乞求舉個例子,」null「是什麼意思? –
道歉,所有的例子都被添加了! – Dizzykiwi