So erstellen Sie eine Exit-Nachricht

208

Gibt es einen einzeiligen Funktionsaufruf, der das Programm beendet und eine Meldung anzeigt? Ich weiß, dass es in Perl so einfach ist wie:

die("Message goes here")

Ich bin es leid, das zu tippen:

puts "Message goes here"
exit
Chris Bunch
quelle
10
Ein kleiner Kommentar, Sie putsschreiben an stdout, während Sie diean stderr schreiben, also : $stderr.puts "Message goes here".
cdarke
Ich weiß, dass dies keine Antwort war, aber es beantwortete meine Frage, danke
Patrick
Nur als Referenz, in Python ist es sys.exit("Message goes to stderr").
Anatoly Techtonik

Antworten:

361

Die abortFunktion macht das. Beispielsweise:

abort("Message goes here")

Hinweis: Die abortNachricht wird geschrieben werden , STDERRim Gegensatz zu , putsdie an schreiben STDOUT.

Chris Bunch
quelle
6
Beeindruckend! Schöner Fund! Schade, dass sie den Exit nicht nur mit dieser Funktionalität überladen haben ...
Mike Stone
56
Beachten Sie, dass abort das Programm mit dem Status false beendet, was einen Fehler darstellt. exit wird standardmäßig mit dem Status true beendet, der den Erfolg darstellt. Stellen Sie sicher, dass Sie die richtige für die Situation verwenden.
Alex Spurling
1
Re. Mike Stones Kommentar, es sieht manchmal so aus, als ob Ruby von einem Team von Leuten geschrieben wurde, die keine Kommunikation miteinander hatten, nicht wahr? (Trotzdem ist es so einfach, darin zu programmieren.)
JellicleCat
24

Wenn Sie einen tatsächlichen Fehler in Ihrem Code anzeigen möchten, können Sie eine RuntimeErrorAusnahme auslösen:

raise RuntimeError, 'Message goes here'

Dadurch wird eine Stapelverfolgung gedruckt, der Typ der ausgelösten Ausnahme und die von Ihnen bereitgestellte Nachricht. Abhängig von Ihren Benutzern kann ein Stacktrace zu beängstigend sein und die eigentliche Nachricht kann im Rauschen verloren gehen. Wenn Sie jedoch aufgrund eines tatsächlichen Fehlers sterben, erhalten Sie über einen Stacktrace zusätzliche Informationen zum Debuggen.

Jörg W Mittag
quelle
24
Sie müssen RuntimeError nicht erwähnen, um eine Ausnahme auszulösen (dies ist die Standardausnahme, die ausgelöst wird), damit der folgende Code ausreicht:
Erhöhen Sie
sunaku - obwohl Ihr Kommentar vollkommen gültig ist, habe ich oft festgestellt, dass es nützlich sein kann, expliziter zu sein, insbesondere für andere Personen, die den Code später lesen.
Shevy
2

Ich habe noch nie von einer solchen Funktion gehört, aber es wäre trivial genug, sie zu implementieren ...

def die(msg)
  puts msg
  exit
end

Wenn dies in einer .rb-Datei definiert ist, die Sie in alle Ihre Skripte aufnehmen, sind Sie golden ... nur weil es nicht eingebaut ist, heißt das nicht, dass Sie es nicht selbst tun können ;-)

Mike Stone
quelle
3
Es stellt sich heraus, dass die 'Abbruch'-Funktion dies tut (siehe meine Antwort unten)
Chris Bunch
1
Warum Code schreiben, wenn die Abbruchfunktion dies für Sie erledigt?
Gary Haran
2
@ChrisBunch Dies ist nicht dasselbe wie die Abbruchfunktion: Standardmäßig wird exitzurückgegeben, als ob dies erfolgreich gewesen wäre. abortgibt einen Fehler zurück. exit 1wird auch einen Fehler zurückgeben.
TemporalWolf
2

Ich habe hier nach einer Möglichkeit gesucht, Code auszuführen, wenn das Programm endet.
Fand dies :

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

Mehrfach aufgerufen registriert mehrere Handler.

Giuse
quelle