Comment créer un message de sortie


208

Y a-t-il un appel de fonction d'une ligne qui quitte le programme et affiche un message? Je sais qu'en Perl, c'est aussi simple que:

die("Message goes here")

J'en ai assez de taper ceci:

puts "Message goes here"
exit

10
Un petit commentaire, vos putsécritures à stdout, alors dieécrit à stderr, donc: $stderr.puts "Message goes here".
cdarke

Je sais que ce n'était pas une réponse, mais cela a répondu à ma question, merci
Patrick

Juste pour la référence, en Python c'est le cas sys.exit("Message goes to stderr").
anatoly techtonik

Réponses:


361

La abortfonction fait cela. Par exemple:

abort("Message goes here")

Remarque: le abortmessage sera écrit STDERRpar opposition à putsqui sera écrit STDOUT.


6
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.


24
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 ;-)


3
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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.