gpt4 book ai didi

ruby - 在 END {} 中访问 Ruby 退出代码

转载 作者:数据小太阳 更新时间:2023-10-29 08:38:45 27 4
gpt4 key购买 nike

Ruby 有 BEGIN {}END {} block ,保证它们分别在代码的主要部分之前和之后运行。

我有以下代码:

BEGIN {
$my_args = ARGV.dup
ARGV.clear
} # clean up 'gets'

# For the truly paranoid in all of us
def self.run_away?
print "You're paranoid. Exit? (Y/n) "
ans = gets.chomp.downcase
if ["no", "n"].include?(ans)
puts "Alright, your call. Let's keep going."
else
puts "EXITING"
log("Exiting at paranoid users request.")
exit 3
end
end

END { } # do stuff here

我在脚本中定义了一些错误代码。我希望能够读取错误代码并根据该代码打印简短描述。例如。 - EXITING - 3: Exit at user request 而不是每次在我的代码中使用 exit 时都写一个描述性字符串。有没有办法在 END {} block 中执行此操作?或者我还缺少其他东西?

编辑/注意:我坚持使用 Ruby 1.8.7 并且以下内容不起作用: (见下文)

BEGIN { puts "BEGIN block!" }

puts "Main block!"
exit 3

END {
puts "END block!"
puts "Current Exception: \n#{$!}"
puts "Current Backtrace: \n#{$@}"
}

输出:

~: $ ./test.rb 
BEGIN block!
Main block!
~: $ echo $?
3
~: $

编辑 #2:我必须在退出之前定义我的 END block 。感谢@Stefan

最佳答案

Kernel#exit提出 SystemExit异常并且由于全局变量 $! 包含当前异常,您可以通过 $!.status 获取退出状态:

END {
puts "exit status: #{$!.status}"
}
exit 3

输出:

exit status: 3

来自documentation :

When an exception has been raised but not yet handled (in rescue, ensure, at_exit and END blocks) the global variable $! will contain the current exception and $@ contains the current exception’s backtrace.

关于ruby - 在 END {} 中访问 Ruby 退出代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18064823/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com