我有一些代码在rspec中传递测试。看来我不需要end
在Ruby中使用双rescue
,甚至begin
就此问题。基本上,当遇到Geocoder错误时返回5
,如果装入CustomError则返回6
,否则返回7
。
def get_stuff
puts "some code work"
rescue ::Geocoder::Error => e
puts "hello"
return 5
rescue CustomError => e
puts "world"
return 6
7
end
答案 0 :(得分:3)
缩进在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
答案 1 :(得分:2)
方法是它自己的begin
/ end
块,因此您可以在需要时rescue
,并在需要时ensure
。
正如您所做的那样,如果return
或rescue
块应返回值,则需要执行明确的ensure
语句。
...虽然我很惊讶你得到了7
......这是你的第二个救援区的一部分而且不应该返回。