答案 0 :(得分:2)
ensure
在主体之后运行,即使引发了异常。因为这可能发生在任何地方,所以如果第一条指令失败,则必须考虑该方法的主体根本没有被执行。
因此,在ensure
块中,所有变量都是已知的,但必须假设它们的值可以是nil
。
如果您确定始终设置了text
,则无需在rescue / ensure子句中保护该分配。
def main
text = "hello"
begin
# here is the code that might fail
ensure
puts typeof(text) # => String
end
end