我对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条款置于何处是必须的?
谢谢!
答案 0 :(得分:3)
基于一些实验,确保在begin,def,class和模块块(即定义+开始)中似乎有效,但不是在顶级而不是在循环,条件或块中/ {| ARGS | ......}。