如何创建退出消息


208

是否有一个单行函数调用退出程序并显示一条消息?我知道在Perl中它很简单:

die("Message goes here")

我厌倦了这样输入:

puts "Message goes here"
exit

10
一个简短的注释,您puts写入stdout,而die写入stderr,因此:$stderr.puts "Message goes here"
cdarke'3

我知道这不是答案,但是它回答了我的问题,谢谢
Patrick

仅供参考,在Python中为sys.exit("Message goes to stderr")
anatoly techtonik 2014年

Answers:


361

abort功能执行此操作。例如:

abort("Message goes here")

注:该abort消息将被写入STDERR,而不是puts将写入STDOUT


6
哇!好发现!太糟糕了,他们不只是超载退出这个功能....
斯通

56
注意,abort退出程序,其状态为false表示失败。默认情况下,退出状态为true表示成功。确保针对情况使用正确的选项。
Alex Spurling

1
回覆。迈克·斯通(Mike Stone)的评论,有时候看起来好像Ruby是由一群彼此没有交流的人编写的,不是吗?(不过,编程非常容易。)
JellicleCat 2012年

24

如果要在代码中表示实际错误,则可以引发RuntimeError异常:

raise RuntimeError, 'Message goes here'

这将打印一个堆栈跟踪,引发异常的类型以及您提供的消息。根据您的用户,堆栈跟踪可能会太吓人,并且实际消息可能会在噪音中丢失。另一方面,如果您由于实际错误而死亡,那么堆栈跟踪将为您提供更多信息以进行调试。


24
您无需提及RuntimeError即可引发一个(这是引发的默认异常类型),因此以下代码就足够了:凸起'Message go
here'– sunaku

sunaku-尽管您的评论完全正确,但我经常发现,更加明确的做法可能会很有用,特别是对以后阅读此代码的其他人而言。
shevy

2

我从来没有听说过这样的功能,但是实现起来很简单……

def die(msg)
  puts msg
  exit
end

然后,如果在包含在所有脚本中的某个.rb文件中定义了该文件,那么您会很高兴....仅仅因为它不是内置的,并不意味着您自己不能这样做;-)


3
原来“中止”功能可以做到(请参阅下面的答案)
克里斯·邦奇

1
为什么当中止功能为您编写代码时?
加里·哈兰

2
@ChrisBunch这是一样的中止功能: exit默认为返回的,如果它成功了。abort返回失败。exit 1也会返回失败。
TemporalWolf

2

我在这里寻找一种在程序结束时执行一些代码的方法。
发现这个

Kernel.at_exit { puts "sayonara" }
# do whatever
# [...]
# call #exit or #abort or just let the program end
# calling #exit! will skip the call

多次调用将注册多个处理程序。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.