方法是否有可能处理参数中发生的错误?
例如
def add(arg1, arg2)
# If the value causes an error, turn it into 0
rescue nil
0
end
arg1 + arg2
end
add(2, 2+nil) => 2
我知道屏蔽参数并在以后进行评估是一个解决方案,但是在我的情况下,这样做变得太麻烦了。
这样做的问题是在您提供参数的那一行发生错误,因为在调用方法之前先对参数进行求值。
每个方法调用大致都与此等效:
arg1 = 2
arg2 = 2 + nil
add(arg1, arg2)
在这种情况下,您可以看到参数本身是如何产生错误的。推迟对参数求值的唯一方法是通过一个块:
add(2) do
2 + nil
end
将您的定义更改为:
def add(v)
v + yield
rescue
v + 0
end
盲目地捕获所有异常通常是一个超级糟糕的计划,那里可能存在一些根本性的错误。除非您对异常的种类有期望,否则最好避免捕获异常。
这是没有异常处理的方法版本:
def add(*args)
args.map(&:to_i).inject(:+)
end
现在nil.to_i
返回0
,您将得到覆盖:
add(2,2,nil)
这将在2+2+0
内部进行评估。
通常,尝试掩埋诸如这样的错误是一个糟糕的计划2+nil
。这是应该解决的基本错误。如果要处理nil
值,可以将.to_i
其映射到可用的值。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句