在Ruby中,没有结束可以进行双重救援吗?

时间:2016-01-21 23:08:54

标签: ruby rescue

我有一些代码在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

2 个答案:

答案 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

正如您所做的那样,如果returnrescue块应返回值,则需要执行明确的ensure语句。

...虽然我很惊讶你得到了7 ......这是你的第二个救援区的一部分而且不应该返回。