退出和中止有什么区别?

x-y*_*uri 34 ruby exit

abort文件说, abort

通过调用Kernel.exit(false)立即终止执行.

"立即"究竟是什么意思?非状态abortexittrue状态有什么区别?

que*_*atl 43

" 退出,退出!中止,提升......让我离开这里! "描述了我想要知道的一切.

简而言之:

  • Kernel.exit(code)"立即退出"脚本并返回code到操作系统,但是,在执行操作之前,它会调用at_exit您的代码可能已注册的任何已注册的处理程序.
  • Kernel.exit!(code)做同样的事情,但立即退出,没有at_exit召集人.
  • Kernel.abort(message)message,将仅有一个故障代码= 1退出之前被打印到stderr.

不同的退出代码值几乎不适合检测问题和调试代码.但是,它们使用起来非常简单,并且使父进程读取它们几乎是微不足道的.因此,exitexit!.

如果您可以花费更多时间并使错误检查更加健壮,那么您将需要一些严重的错误消息,而不仅仅是代码.传统上,如果存在,您可以将它们打印到STDERR.您可以通过正常手动打印到STDERR puts,但退出代码仍将在最低级别使用.

打印到STDERR并不会将作业自动标记为失败,因此,abort创建该作业是为了让您轻松编写和退出.默认退出代码1足以标记FAIL条件,因为假设所有真实的上下文信息都将包含在您提供的错误消息中.

还要注意,任何raise "wtf"无法处理的异常,例如没有rescue任何地方,实际上就像调用一样Kernel.abort:它们打印到STDERR并使用exitcode=1.

你说exit(false)exit!文档说status code要使用该参数.

我刚刚在Windows和Ruby 1.9.3上检查过:

exit 0       # quits with code: 0
exit 1       # quits with code: 1
exit false   # quits with code: 1
exit true    # quits with code: 0
Run Code Online (Sandbox Code Playgroud)

这让我感到惊讶,因为我认为这false将以0传统的C方式被强制执行.所以,也许您应该使用整数,0或者1非常清楚将使用哪些代码.

  • `exit(false)` 是来自[文档](http://ruby-doc.org/core-2.1.1/Kernel.html#method-i-abort)的引用,您必须使用它的简化版本。另外,您链接的[文章](http://www.sitepoint.com/exit-exit-abort-raise-get-me-outta-here/)说:“Unix世界中有一个约定,退出代码等于 0 意味着程序成功。任何其他退出代码都表示某种失败。” “Windows”也是如此。 (2认同)