abort份文件显示abort份将

通过调用内核立即终止执行.退出(错误).

"立即"到底是什么意思?非true身份的abortexit有什么区别?

推荐答案

"Exit, Exit! Abort, Raise…Get Me Outta Here!"描述了你想知道的一切.

简而言之:

  • Kernel.exit(code)立即"退出"脚本并将code返回给操作系统,然而,就在执行之前,它会调用代码可能已注册的任何已注册at_exit处理程序.
  • Kernel.exit!(code)也有同样的作用,但立即退出,没有at_exit个处理程序被调用.
  • Kernel.abort(message)接受一个message,在退出之前,它将打印到STDERR,故障代码=1.

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

如果你能花更多的时间,使错误判断更加健壮,你将需要一些严重的错误信息,而不仅仅是代码.传统上,如果STDERR存在,您可以将它们打印到STDERR.您可以通过normal puts手动打印到STDERR,但退出代码仍将在最低级别使用.

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

还要注意的是,任何未经处理的异常,例如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

这真的让我很惊讶,因为我假设false会以传统的C方式强制变为0.所以,也许你更应该使用像01这样的整数来清楚地知道将使用什么代码.

Ruby相关问答推荐

RSpec 是否有 python 类似功能来做 TDD?

仅在模块中列出方法?

如何在 OpenURI 中指定http 请求标头

冒号:和粗箭头=>有什么区别

在 Ruby 中为类添加实例变量

什么是 '?-mix' 在 Ruby 正则表达式中

如何使用 capybara + cucumber 断言 ruby​​ 中的 html 表行数

判断文件是否包含字符串

如何在没有继承方法的情况下获取类的公共方法?

按可能为 nil 的属性对对象的 ruby​​ 数组进行排序

require File.expand_path(..., __FILE__) 是最佳实践吗?

如何使用 Ruby 2.3 中引入的 Array#dig 和 Hash#dig?

Ruby 中 Array#reject 的反义词是什么?

Ruby 1.9 哈希,键中有破折号

在 Ruby 中获取本月的最后一天

if语句末尾带有then有什么区别?

如何在 jekyll markdown 博客中包含视频

使用整数作为哈希键

如何在没有 RVM 的 Ubuntu 上安装 Ruby 2

在 Ruby 中使用元组?