2008-08-27 15 views
196

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

die("Message goes here") 

Ich bin müde diese einzutippen:

puts "Message goes here" 
exit 
+9

Ein kleiner Kommentar, Ihre 'puts' schreibt in stdout, während' sterben' in stderr schreibt, also: '$ stderr.puts 'Nachricht geht hier''. – cdarke

+0

Ich weiß, dass dies keine Antwort war, aber es beantwortete meine Frage, danke – Patrick

+0

Nur für die Referenz, in Python ist es 'sys.exit (" Message goes to stderr ")'. –

Antwort

340

Die Funktion abort macht dies. Zum Beispiel:

abort("Message goes here") 

Hinweis: Die abort Nachricht an STDERR geschrieben werden als zu puts gegenüber, die zu STDOUT schreiben.

+6

Wow! Schöner Fund! Schade, dass sie den Exit nicht mit dieser Funktionalität überladen haben. –

+48

Hinweis, Abbruch beendet das Programm mit dem Status false, was einen Fehler darstellt. Standardmäßig wird exit mit dem Status "true" als Erfolg abgeschlossen. Stellen Sie sicher, dass Sie die richtige für die Situation verwenden. –

+1

zu. Mike Stones Kommentar, es sieht manchmal so aus, als wäre Ruby von einem Team von Leuten geschrieben worden, die keine Kommunikation untereinander hatten, nicht wahr? (Trotzdem ist es so einfach darin zu programmieren.) – JellicleCat

2

Ich habe noch nie eine solche Funktion zu hören, aber es wäre trivial genug sein, zu implementieren. ..

def die(msg) 
    puts msg 
    exit 
end 

Dann wenn diese in einigen .rb-Datei definiert ist, die Sie in Ihre Skripte enthalten, sind Sie golden .... nur weil es nicht gebaut ist in Sie bedeutet nicht, nicht tun kann es selbst ;-)

+3

Stellt sich heraus, die 'Abbruch' Funktion tut es (siehe meine Antwort unten) –

+1

Warum Code schreiben, wenn die Abbruchfunktion es für Sie tut? –

+0

@ChrisBunch Dies ist ** nicht ** das gleiche wie die Abbruchfunktion: 'exit' kehrt standardmäßig so zurück, als wäre es erfolgreich. 'abort' gibt einen Fehler zurück. 'exit 1' gibt auch einen Fehler zurück. – TemporalWolf

23

Wenn Sie einen tatsächlichen Fehler im Code bezeichnen wollen, können Sie eine RuntimeError Ausnahme auslösen könnte:

raise RuntimeError, 'Message goes here' 

Dieser einen Stacktrace gedruckt wird, hat die Art der Ausnahme wird und die Botschaft, die Sie zur Verfügung gestellt. Abhängig von Ihren Benutzern könnte ein Stacktrace zu gruselig sein und die eigentliche Nachricht könnte im Rauschen verloren gehen. Auf der anderen Seite, wenn Sie wegen eines tatsächlichen Fehlers sterben, gibt Ihnen ein Stacktrace zusätzliche Informationen zum Debuggen.

+23

Sie müssen RuntimeError nicht erwähnen, um einen zu erhöhen (es ist die Standardausnahmebedingung), so dass der folgende Code ausreicht: raise 'Nachricht geht hier' – sunaku

+0

sunaku - während Ihr Kommentar vollkommen gültig ist, habe ich das oft gefunden expliziter kann nützlich sein, insbesondere für andere Leute, die den Code später lesen. – shevy

2

Ich habe hier nach einem Weg gesucht, um Code auszuführen, wenn das Programm endet.
Found this:

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

Genannt werden mehrmals mehrere Handler registrieren.

Verwandte Themen