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.
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
exitend
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 ;-)
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
puts
schreiben an stdout, während Siedie
an stderr schreiben, also :$stderr.puts "Message goes here"
.sys.exit("Message goes to stderr")
.Antworten:
Die
abort
Funktion macht das. Beispielsweise:Hinweis: Die
abort
Nachricht wird geschrieben werden ,STDERR
im Gegensatz zu ,puts
die an schreibenSTDOUT
.quelle
Wenn Sie einen tatsächlichen Fehler in Ihrem Code anzeigen möchten, können Sie eine
RuntimeError
Ausnahme auslösen: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.
quelle
Ich habe noch nie von einer solchen Funktion gehört, aber es wäre trivial genug, sie zu implementieren ...
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 ;-)
quelle
exit
zurückgegeben, als ob dies erfolgreich gewesen wäre.abort
gibt einen Fehler zurück.exit 1
wird auch einen Fehler zurückgeben.Ich habe hier nach einer Möglichkeit gesucht, Code auszuführen, wenn das Programm endet.
Fand dies :
Mehrfach aufgerufen registriert mehrere Handler.
quelle