Ruby: Ordne die Ausgabe einer Funktion nur zu, wenn sie nil nicht zurückgibt

8

Bei der Programmierung in Ruby habe ich oft Aufgaben wie die folgenden:

%Vor%

Mit diesen Zuweisungen möchte ich die Ausgabe einer Funktion zuweisen, aber wenn sie nil zurückgibt, möchte ich den Inhalt der Variablen behalten. Ich weiß, dass es bedingte Zuweisungen gibt, aber weder ||= noch &&= können hier verwendet werden. Der kürzeste Weg, den ich gefunden habe, um die obige Aussage zu beschreiben, ist

%Vor%

Gibt es einen besseren / kürzeren Weg, dies zu tun?

    
Florian Feldhaus 03.11.2012, 11:28
quelle

2 Antworten

5

Ich glaube nicht, dass es etwas besseres gibt als das letzte Snippet, das du gezeigt hast, aber beachte, dass or für die Flusskontrolle verwendet wird, benutze stattdessen || :

%Vor%

Es ist normalerweise besser, neuen Namen neue Werte zuzuweisen, der resultierende Code ist leichter zu verstehen und zu debuggen, da Variablen / Symbole den gleichen Wert im gesamten Bereich haben:

%Vor%     
tokland 03.11.2012, 12:03
quelle
0

Ich würde nur Klammern hinzufügen

  
    

(a = b) unless b.nil?

         

(a = b) if b

  

ist minderwertig, denn wenn b falsch ist, bleibt a wie zuvor

Beachten Sie, dass dies b zweimal auswertet. Wenn b eine Funktion mit Nebeneffekten ist (z. B. das Ändern von Variablen außerhalb des Bereichs oder des Drucks), wird dies zweimal durchgeführt. Um dies zu vermeiden, müssen Sie

verwenden
  
    

temp = b; (a = temp) unless temp.nil?

  

(was natürlich in zwei Teile aufgeteilt werden kann)

  
    

temp = b

         

(a = temp) unless temp.nil?

  
    
Andrew Wonnacott 08.11.2012 01:55
quelle

Tags und Links