'var = etwas, was kein' rettung 'Verhalten ist

7

In Ruby können Sie am Ende einer Zuweisung ein rescue schreiben, um eventuell auftretende Fehler zu erkennen. Ich habe eine Funktion (unten: a_function_that_may_fail ), wo es bequem ist, einen Fehler auszulösen, wenn bestimmte Bedingungen nicht erfüllt sind. Der folgende Code funktioniert gut

%Vor%

Allerdings hätte ich gerne post ['Caption'] nicht einmal gesetzt, wenn die Funktion fehlschlägt.

Ich weiß, dass ich tun kann:

%Vor%

aber das fühlt sich etwas übertrieben an - gibt es eine einfachere Lösung?

    
JP. 12.04.2010, 11:48
quelle

3 Antworten

19

Das Problem hat Vorrang. Die einfachste Lösung:

%Vor%

Das Ändern der Priorität ist jedoch ein wenig esoterisch. Es wäre wahrscheinlich besser, wenn Sie Ihre a_function_that_may_fail neu schreiben könnten, um nil zurückzugeben, wenn sie fehlschlägt.

Sie können auch eine temporäre Variable verwenden und auf Nilness testen:

%Vor%

Ein wirklich kleiner Unterschied ist, dass dies post['Caption'] nicht setzt, wenn a_function_that_may_fail keine Ausnahme ausgelöst hat, sondern nil zurückgegeben hat.

    
molf 12.04.2010, 11:59
quelle
3
%Vor%     
Firas Assaad 12.04.2010 12:08
quelle
2

Stellen Sie sicher, dass Ihre Methode entweder nil oder false :

zurückgibt %Vor%

Sie können dann den if-Modifikator verwenden, um den Rückgabewert Ihrer Methode zu überprüfen und den Wert nur zuweisen, wenn es nicht nil oder false :

ist %Vor%

oder Sie können den Rückgabewert von this_may_fail in einer lokalen Variablen zwischenspeichern, wenn Sie die Methode für die if-Bedingung und -Zuordnung nicht zweimal aufrufen möchten.

%Vor%

Beachten Sie auch, dass der Modifizierer rescue nur StandardError und seine Unterklassen abfängt.

    
rubiii 12.04.2010 11:58
quelle

Tags und Links