Łał! Niezłe znalezisko! Szkoda, że nie tylko przeciążyli wyjścia tą funkcją ...
Mike Stone
56
Uwaga: polecenie przerwania kończy działanie programu ze statusem false, co oznacza awarię. exit domyślnie kończy pracę ze statusem true reprezentującym sukces. Upewnij się, że używasz odpowiedniego do sytuacji.
Alex Spurling,
1
re. Komentarz Mike'a Stone'a czasem wygląda na to, że Ruby został napisany przez zespół ludzi, którzy nie mieli ze sobą żadnej komunikacji, prawda? (Mimo to programowanie w nim jest tak łatwe.)
JellicleCat
24
Jeśli chcesz wskazać rzeczywisty błąd w kodzie, możesz zgłosić RuntimeErrorwyjątek:
raise RuntimeError,'Message goes here'
Spowoduje to wydrukowanie śledzenia stosu, typu zgłaszanego wyjątku i podanego komunikatu. W zależności od użytkowników ślad stosu może być zbyt przerażający, a rzeczywista wiadomość może zagubić się w hałasie. Z drugiej strony, jeśli umrzesz z powodu rzeczywistego błędu, stacktrace dostarczy ci dodatkowych informacji do debugowania.
Nie trzeba wspominać o RuntimeError, aby zgłosić jeden (jest to domyślny rodzaj zgłaszanego wyjątku), więc wystarczy następujący kod: podwyżka „Wiadomość idzie tutaj”
sunaku,
sunaku - chociaż twój komentarz jest całkowicie poprawny, często stwierdziłem, że bardziej precyzyjne może być przydatne, w szczególności dla innych osób czytających kod później.
shevy
2
Nigdy nie słyszałem o takiej funkcji, ale wdrożenie jej byłoby wystarczająco trywialne ...
def die(msg)
puts msg
exitend
Następnie, jeśli jest to zdefiniowane w jakimś pliku .rb, który dołączasz do wszystkich swoich skryptów, jesteś złoty ... tylko dlatego, że nie jest wbudowany, nie oznacza, że nie możesz zrobić tego sam ;-)
Okazuje się, że robi to funkcja „przerywania” (patrz moja odpowiedź poniżej)
Chris Bunch,
1
Po co pisać kod, gdy funkcja przerywania robi to za Ciebie?
Gary Haran
2
@ChrisBunch Nie jest to to samo, co funkcja przerwania: exitdomyślnie zwraca wartość tak, jakby się powiodła. abortzwraca błąd. exit 1zwróci również awarię.
TemporalWolf,
2
Przybyłem tutaj, szukając sposobu na wykonanie kodu po zakończeniu programu. Znaleziono to :
Kernel.at_exit { puts "sayonara"}# do whatever# [...]# call #exit or #abort or just let the program end# calling #exit! will skip the call
Wielokrotne wywołanie spowoduje zarejestrowanie wielu programów obsługi.
puts
zapisy do stdout, podczasdie
zapisu do stderr, więc:$stderr.puts "Message goes here"
.sys.exit("Message goes to stderr")
.Odpowiedzi:
abort
Funkcja to robi. Na przykład:Uwaga:
abort
wiadomość zostanie zapisanaSTDERR
w przeciwieństwie do, doputs
której będzie pisaćSTDOUT
.źródło
Jeśli chcesz wskazać rzeczywisty błąd w kodzie, możesz zgłosić
RuntimeError
wyjątek:Spowoduje to wydrukowanie śledzenia stosu, typu zgłaszanego wyjątku i podanego komunikatu. W zależności od użytkowników ślad stosu może być zbyt przerażający, a rzeczywista wiadomość może zagubić się w hałasie. Z drugiej strony, jeśli umrzesz z powodu rzeczywistego błędu, stacktrace dostarczy ci dodatkowych informacji do debugowania.
źródło
Nigdy nie słyszałem o takiej funkcji, ale wdrożenie jej byłoby wystarczająco trywialne ...
Następnie, jeśli jest to zdefiniowane w jakimś pliku .rb, który dołączasz do wszystkich swoich skryptów, jesteś złoty ... tylko dlatego, że nie jest wbudowany, nie oznacza, że nie możesz zrobić tego sam ;-)
źródło
exit
domyślnie zwraca wartość tak, jakby się powiodła.abort
zwraca błąd.exit 1
zwróci również awarię.Przybyłem tutaj, szukając sposobu na wykonanie kodu po zakończeniu programu.
Znaleziono to :
Wielokrotne wywołanie spowoduje zarejestrowanie wielu programów obsługi.
źródło