Mam zadanie prowizji, w którym na początku przeprowadzam kilka kontroli, jeśli jeden z testów nie powiedzie się, chciałbym wrócić wcześniej z zadania prowizji, nie chcę wykonywać żadnego z pozostałych kodów.
Myślałem, że rozwiązaniem byłoby umieszczenie zwrotu w miejscu, w którym chciałbym powrócić z kodu, ale pojawia się następujący błąd
unexpected return
break
i mam ten błąd: rake przerwany! przerwa od proc-closure (Zobacz pełny ślad, uruchamiając zadanie za pomocą --trace)next
działa tylko wtedy, gdy jest na „poziomie” bloku do wyrwania.Możesz użyć
abort(message)
z wnętrza zadania, aby przerwać to zadanie za pomocą wiadomości.źródło
next
. Kocham to.Zwykle używam,
abort
która jest lepszą alternatywą w takich sytuacjach, na przykład:źródło
abort
radzisz bez wychodzenia z1
kodem wyjścia? Zadania prowizji są często używane w wierszu polecenia do określenia sukcesu lub niepowodzenia. Czy istnieje „sukces”abort
?exit
to, że to dobry sposób na pomyślne wyjście.Wróć z błędem ❌
Jeśli wracasz z błędem (tj. Kod zakończenia
1
), którego chcesz użyćabort
, który również przyjmuje opcjonalny parametr ciągu, który zostanie wyświetlony na wyjściu:W wierszu poleceń:
Wróć z sukcesem ✅
Jeśli wracasz bez błędu (tj. Kod wyjścia z
0
), będziesz chciał użyćexit
, który nie przyjmuje parametrów ciągu.W wierszu poleceń:
Jest to ważne, jeśli używasz tego do zadania cron lub czegoś, co musi zrobić później, w zależności od tego, czy zadanie rake zakończyło się powodzeniem, czy nie.
źródło
Jeśli musisz wyjść z wielu poziomów bloków, możesz użyć fail .
Na przykład
(Zobacz https://stackoverflow.com/a/3753955/11543 .)
źródło
Jeśli miałeś na myśli wyjście z zadania rake bez powodowania „przerwania rake!” wiadomość do wydrukowania, możesz użyć „Przerwij” lub „Wyjdź”. Ale „przerywanie”, gdy jest używane w bloku ratunkowym, kończy zadanie, a także drukuje cały błąd (nawet bez użycia --trace). Używam więc „exit”.
źródło
Użyłem
next
podejścia sugerowanego przez Simone Carletti, ponieważ podczas testowania zadania rakeabort
, które w rzeczywistości jest tylko opakowaniemexit
, nie jest pożądane zachowanie.Przykład:
źródło