Hou la la! Belle trouvaille! Dommage qu'ils n'aient pas simplement surchargé la sortie avec cette fonctionnalité ....
Mike Stone
56
Remarque, abandonner quitte le programme avec un état faux qui représente un échec. exit par défaut quitte avec un statut true représentant le succès. Assurez-vous d'utiliser le bon pour la situation.
Alex Spurling
1
ré. Le commentaire de Mike Stone, il semble parfois que Ruby a été écrit par une équipe de personnes qui n'avaient aucune communication entre eux, n'est-ce pas? (Pourtant, il est si facile de le programmer.)
JellicleCat
24
Si vous souhaitez signaler une erreur réelle dans votre code, vous pouvez déclencher une RuntimeErrorexception:
raise RuntimeError,'Message goes here'
Cela imprimera une trace de pile, le type de l'exception levée et le message que vous avez fourni. Selon vos utilisateurs, une trace de pile peut être trop effrayante et le message réel peut se perdre dans le bruit. En revanche, si vous mourrez à cause d'une erreur réelle, un stacktrace vous donnera des informations supplémentaires pour le débogage.
Vous n'avez pas besoin de mentionner RuntimeError pour en déclencher une (c'est le type d'exception par défaut levé), le code suivant suffira donc: raise 'Message goes here'
sunaku
sunaku - bien que votre commentaire soit parfaitement valide, j'ai souvent trouvé qu'être plus explicite peut être utile, en particulier pour d'autres personnes lisant le code par la suite.
shevy
2
Je n'ai jamais entendu parler d'une telle fonction, mais ce serait assez trivial à mettre en œuvre ...
def die(msg)
puts msg
exit
end
Ensuite, si cela est défini dans un fichier .rb que vous incluez dans tous vos scripts, vous êtes en or .... juste parce qu'il n'est pas intégré ne signifie pas que vous ne pouvez pas le faire vous-même ;-)
Il s'avère que la fonction 'abandon' le fait (voir ma réponse ci-dessous)
Chris Bunch
1
Pourquoi écrire du code quand la fonction d'abandon le fait pour vous?
Gary Haran, du
2
@ChrisBunch Ce n'est pas la même chose que la fonction d' abandon : exitrevient par défaut comme si elle avait réussi. abortrenvoie un échec. exit 1renverra également un échec.
TemporalWolf
2
Je suis arrivé ici à la recherche d'un moyen d'exécuter du code à la fin du programme. Trouvé ceci :
Kernel.at_exit { puts "sayonara"}# do whatever# [...]# call #exit or #abort or just let the program end# calling #exit! will skip the call
Appelé plusieurs fois enregistrera plusieurs gestionnaires.
puts
écritures à stdout, alorsdie
écrit à stderr, donc:$stderr.puts "Message goes here"
.sys.exit("Message goes to stderr")
.Réponses:
La
abort
fonction fait cela. Par exemple:Remarque: le
abort
message sera écritSTDERR
par opposition àputs
qui sera écritSTDOUT
.la source
Si vous souhaitez signaler une erreur réelle dans votre code, vous pouvez déclencher une
RuntimeError
exception:Cela imprimera une trace de pile, le type de l'exception levée et le message que vous avez fourni. Selon vos utilisateurs, une trace de pile peut être trop effrayante et le message réel peut se perdre dans le bruit. En revanche, si vous mourrez à cause d'une erreur réelle, un stacktrace vous donnera des informations supplémentaires pour le débogage.
la source
Je n'ai jamais entendu parler d'une telle fonction, mais ce serait assez trivial à mettre en œuvre ...
Ensuite, si cela est défini dans un fichier .rb que vous incluez dans tous vos scripts, vous êtes en or .... juste parce qu'il n'est pas intégré ne signifie pas que vous ne pouvez pas le faire vous-même ;-)
la source
exit
revient par défaut comme si elle avait réussi.abort
renvoie un échec.exit 1
renverra également un échec.Je suis arrivé ici à la recherche d'un moyen d'exécuter du code à la fin du programme.
Trouvé ceci :
Appelé plusieurs fois enregistrera plusieurs gestionnaires.
la source