使用 和有什么区别
ensure
:begin foo_process rescue bar_process ensure baz_process end
并将进程放在
begin
...rescue
...end
块之后?begin foo_process rescue bar_process end baz_process
使用 和有什么区别
else
:begin foo_process rescue bar_process else baz_process end
并在之前继续该过程
rescue
(假设baz_process
不会引发错误)?begin foo_process baz_process rescue bar_process end
问问题
170 次
2 回答
2
1.
即使抛出异常,从方法返回,使用ensure
,也会始终执行。baz_process
foo_process
例如,
def foo_process
puts 'foo_process'
return 111
end
def f1
begin
return foo_process
rescue
puts 'bar_process'
ensure
puts 'baz_process'
end
end
def f2
begin
return foo_process
rescue
puts 'bar_process'
end
puts 'baz_process'
end
>> f1
foo_process
baz_process
=> 111
>> f2
foo_process
=> 111
于 2013-08-02T06:17:28.160 回答
0
ensure
对于问题 1 ,usingbaz_process
将始终运行,即使rescue
块未捕获异常(即在您的示例代码中,即使异常不是 a StandardError
)。bar_process
如果引发异常,它也会运行。begin...rescue...ensure
对于放置在块之后的代码,这些都不是真的。
对于问题2,区别在于else
block中的代码抛出的异常没有被抢救。当还有一个确保块时,这更相关,因为代码将在它之前运行。
于 2013-08-02T06:26:29.657 回答