Ich habe eine Rake-Aufgabe, bei der ich zu Beginn einige Überprüfungen durchführe. Wenn eine der Überprüfungen fehlschlägt, möchte ich frühzeitig von der Rake-Aufgabe zurückkehren. Ich möchte keinen der verbleibenden Codes ausführen.
Ich dachte, die Lösung wäre, eine Rückgabe dort zu platzieren, wo ich vom Code zurückkehren wollte, aber ich erhalte den folgenden Fehler
unexpected return
break
und ich habe diesen Fehler: Rechen abgebrochen! Pause vom Prozessabschluss (Siehe vollständige Ablaufverfolgung durch Ausführen der Aufgabe mit --trace)next
funktioniert nur, wenn es auf "Ebene" des Blocks gibt, aus dem man ausbrechen kann.Sie können diese
abort(message)
Aufgabe innerhalb der Aufgabe mit einer Nachricht abbrechen.quelle
next
. Liebe es.Ich neige dazu zu verwenden,
abort
was in solchen Situationen eine bessere Alternative ist, zum Beispiel:quelle
abort
ohne mit einem1
Exit-Code zu beenden? Rechenaufgaben werden häufig in der Befehlszeile verwendet, um Erfolg oder Misserfolg zu bestimmen. Gibt es eine "erfolgreiche"abort
?exit
als wäre dies ein guter Weg, um erfolgreich zu beenden.Rückkehr mit einem Fehler ❌
Wenn Sie mit einem Fehler (dh einem Exit-Code von
1
) zurückkehren, den Sie verwenden möchten,abort
wird auch ein optionaler Zeichenfolgenparameter verwendet, der beim Beenden ausgegeben wird:In der Befehlszeile:
Rückkehr mit Erfolg ✅
Wenn Sie ohne Fehler (dh mit einem Exit-Code von
0
) zurückkehren, möchten Sie Folgendes verwendenexit
, für das kein Zeichenfolgenparameter erforderlich ist.In der Befehlszeile:
Dies ist wichtig, wenn Sie dies in einem Cron-Job verwenden oder etwas, das anschließend ausgeführt werden muss, je nachdem, ob die Rechenaufgabe erfolgreich war oder nicht.
quelle
Wenn Sie aus mehreren Blockebenen ausbrechen müssen , können Sie fail verwenden .
Beispielsweise
(Siehe https://stackoverflow.com/a/3753955/11543 .)
quelle
Wenn Sie vorhatten, eine Rechenaufgabe zu verlassen, ohne den "Rechen abgebrochen!" Wenn die Nachricht gedruckt werden soll, können Sie entweder "Abbrechen" oder "Beenden" verwenden. "Abbruch" beendet jedoch bei Verwendung in einem Rettungsblock die Aufgabe und gibt den gesamten Fehler aus (auch ohne Verwendung von --trace). Also benutze ich "exit".
quelle
Ich habe
next
den von Simone Carletti vorgeschlagenen Ansatz verwendet , da beim Testen der Rechenaufgabeabort
, die eigentlich nur ein Wrapperexit
ist, nicht das gewünschte Verhalten vorliegt.Beispiel:
quelle