我试图在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