在
Ruby中,您可以在任务结束时编写救援以捕获可能出现的任何错误.我有一个函数(下面:a_function_that_may_fail),如果不满足某些条件,它会让它抛出错误.以下代码运行良好
post = {} # Other Hash stuff post['Caption'] = a_function_that_may_fail rescue nil
但是,如果函数失败,我想发帖[‘Caption’]甚至没有设置.
我知道我能做到:
begin post['Caption'] = a_function_that_may_fail rescue end
但感觉有点过分 – 是否有更简单的解决方案?
解决方法
问题是优先的.最简单的解决方案:
(post['Caption'] = a_function_that_may_fail) rescue nil
但是,更改这样的优先级有点深奥.如果你可以重写你的a_function_that_may_fail,如果失败则返回nil可能会更好.
您还可以使用临时变量并测试nilness:
caption = a_function_that_may_fail rescue nil post['Caption'] = caption unless caption.nil?
一个非常小的区别是,如果a_function_that_may_fail没有引发异常但是返回了nil,则不会设置post [‘Caption’].