关于Ruby中'ensure'标记的问题

时间:2009-10-15 19:53:51

标签: ruby

我对ruby如何解释代码中的de ensure子句有一点疑问。 据我所知,keep子句必须始终包含在 begin end 标记中。

例如,如果我写这段代码会引发kENSURE错误(C:/ Documents and Settings / jlomonaco / Desktop / borrar.rb:3:语法错误,未指定 d kENSURE,期待$ end

x=5
raise "ERROR!!!" if x==5
ensure
puts "some code has been executed"

但是,如果我在开始结束子句之间包装此代码,则不会引发错误:

begin
x=5
raise "ERROR!!!" if x==5
ensure
puts "some code has been executed"
end

所以这是我的问题:

我发现函数定义中的并不是必须在开始和结束之间包装确保标记;例如,我可以编写此代码,不会产生任何错误:

def stackoverflow
 x=5
 raise "ERROR!!!" if x==5
ensure
 puts "some code has been executed"
end

stackoverflow

如果我编写开始和结束标记,代码也可以正常工作。 那么将BEGIN和END条款置于何处是必须的?

谢谢!

1 个答案:

答案 0 :(得分:3)

基于一些实验,确保在begin,def,class和模块块(即定义+开始)中似乎有效,但不是在顶级而不是在循环,条件或块中/ {| ARGS | ......}。