在Ruby中,没有结束的情况下可以进行双重救援吗?
我有一些通过rspec测试的代码。看起来我不需要end
在Ruby中有双重rescue
,或者甚至在begin
的情况下。实质上,如果遇到Geocoder错误,我将返回5
,如果包含CustomError,则返回6
,否则返回7
。在Ruby中,没有结束的情况下可以进行双重救援吗?
def get_stuff
puts "some code work"
rescue ::Geocoder::Error => e
puts "hello"
return 5
rescue CustomError => e
puts "world"
return 6
7
end
的方法就是自己begin
/end
块,这样你就可以做rescue
当你需要它,也ensure
当你需要它。
正如你所做的那样,如果rescue
或ensure
块应该返回一个值,你确实需要做明确的return
语句。
...虽然我很惊讶,你得到7
返回...这是你的第二个救援块的一部分,不应该返回。
7只缩进2个空格(它与救援内联),而6和5缩进4个空格,所以如果没有任何错误被击中,将不会返回7? – Nona
这不是python,这是ruby。除了提高可读性以外,缩进没有任何意义。 – SteveTurczyn
'7'永远不会被退回。 –
缩进在Ruby中并不重要。从技术上讲,7
将永远不会被退回,因为你在return 6
行后面的救援块内有它。
如果你想返回7
时没有提出错误,把它放在最后一行rescue
块之前:
def get_stuff
puts "some code work"
7 #success!
rescue ::Geocoder::Error => e
puts "hello"
return 5
rescue CustomError => e
puts "world"
return 6
end
如果你看过关于使用'rescue'一些教程,它很可能帮助。这是我见过的所有Ruby书籍的一部分。 –