Come creare un messaggio di uscita


208

Esiste una chiamata a una linea che esce dal programma e visualizza un messaggio? So che in Perl è semplice come:

die("Message goes here")

Sono stanco di scrivere questo:

puts "Message goes here"
exit

10
Un piccolo commento, i tuoi putsscrive su stdout, mentre diescrive a stderr, così: $stderr.puts "Message goes here".
cdarke,

So che questa non era una risposta, ma ha risposto alla mia domanda, grazie
Patrick,

Solo per riferimento, in Python lo è sys.exit("Message goes to stderr").
Anatoly Techtonik,

Risposte:


361

La abortfunzione fa questo. Per esempio:

abort("Message goes here")

Nota: il abortmessaggio verrà scritto in STDERRopposizione a putscui scriverà STDOUT.


6
Wow! Bella scoperta! Peccato che non abbiano solo sovraccaricato l'uscita con questa funzionalità ....
Mike Stone,

56
Nota, abort esce dal programma con uno stato false che rappresenta un errore. exit per impostazione predefinita esce con uno stato di true che rappresenta il successo. Assicurati di usare quello giusto per la situazione.
Alex Spurling,

1
ri. Il commento di Mike Stone, a volte sembra che Ruby sia stato scritto da un team di persone che non avevano comunicazioni tra loro, vero? (Comunque, è così facile programmarlo.)
JellicleCat

24

Se si desidera indicare un errore effettivo nel codice, è possibile sollevare RuntimeErrorun'eccezione:

raise RuntimeError, 'Message goes here'

Verrà stampato uno stacktrace, il tipo di eccezione sollevata e il messaggio fornito. A seconda degli utenti, uno stacktrace potrebbe essere troppo spaventoso e il messaggio reale potrebbe perdersi nel rumore. D'altra parte, se muori a causa di un errore reale, uno stacktrace ti fornirà ulteriori informazioni per il debug.


24
Non è necessario menzionare RuntimeError per sollevarne uno (è il tipo predefinito di eccezione sollevata), quindi il seguente codice sarà sufficiente: aumentare "Il messaggio va qui"
sunaku

sunaku - mentre il tuo commento è perfettamente valido, ho spesso scoperto che essere più espliciti può essere utile, in particolare per altre persone che leggono il codice in seguito.
Shevy,

2

Non ho mai sentito parlare di una tale funzione, ma sarebbe abbastanza banale da implementare ...

def die(msg)
  puts msg
  exit
end

Quindi, se questo è definito in alcuni file .rb che includi in tutti i tuoi script, sei d'oro .... solo perché non è integrato non significa che non puoi farlo da solo ;-)


3
Si scopre che la funzione 'abort' lo fa (vedi la mia risposta di seguito)
Chris Bunch,

1
Perché scrivere codice quando la funzione di interruzione fa per te?
Gary Haran,

2
@ChrisBunch Questa non è la stessa della funzione di interruzione: il exitvalore predefinito è di ritorno come se fosse riuscito. abortrestituisce un errore. exit 1restituirà anche un errore.
TemporalWolf,

2

Sono arrivato qui alla ricerca di un modo per eseguire del codice ogni volta che termina il programma.
Trovato questo :

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

Chiamato più volte registrerà più gestori.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.