内核#at_exit方法和END(全部大写)关键字之间存在哪些差异(如果有)?后者仅仅是一种更为Perlish的做事方式,前者更像是Ruby风格吗?
我尝试过defined?(END {puts "Bye"})
,但语法错误.
"Ruby编程语言"定义了他们行为的微小差异.at_exit
可以在循环内多次调用,并在代码退出时执行每次迭代调用.END
只会在循环内部调用一次.
...如果END语句在循环内并且执行多次,那么与之关联的代码仍然只注册一次:
a = 4;
if (true)
END { # This END is executed
puts "if"; # This code is registered
puts a # The variable is visible; prints "4"
}
else
END { puts "else" } # This is not executed
end
10.times {END { puts "loop" }} # Only executed once
Run Code Online (Sandbox Code Playgroud)
内核方法at_exit提供了END语句的替代方法; 它会在解释器退出之前注册要执行的代码块.与END块一样,与第一个at_exit调用关联的代码将最后执行.如果在循环内多次调用at_exit方法,那么当解释器退出时,与其关联的块将被执行多次.
所以,运行:
2.times {
END { puts 'END'}
at_exit { puts 'at_exit' }
}
Run Code Online (Sandbox Code Playgroud)
结果是:
at_exit at_exit END