2011-01-09 17 views

Antwort

25

Der Name des Betreibers ist die null-coalescing operator. Der ursprüngliche Blogbeitrag, mit dem ich verlinkt habe, deckte die Unterschiede in der Nullzusammenführung zwischen Sprachen ab. Ein neuerer Vergleich zwischen C# und Ruby Null Koaleszenz kann here gefunden werden.

Kurz gesagt, können Sie || verwenden, wie:

a_or_b = (a || b) 
+0

Die Verbindung ist jetzt tot. – orourkedd

+0

@orourkedd Danke, ich habe es ein wenig überarbeitet mit einem neuen Link. –

+2

Dies ist eigentlich ein "Falsy Coalescing Operator". – Kelvin

12

Wenn Sie nichts dagegen falsch Koaleszieren, Sie können die Verwendung || Betreiber:

a = b || c 

Wenn false einen gültigen Wert sein kann, können Sie tun:

a = b.nil? ? c : b 

Wo b für Null aktiviert ist, und wenn ja, wird ein Wert von c zugewiesen, und wenn nicht B.

+0

Ich versuchte 'a = b oder c; setzt ein '. Überraschung, Überraschung, in meinem Rubin 1.8.6, druckt es den Wert von b.Der Grund ist, dass 'or' eine niedrigere Priorität hat als' = ' – Shuo

+0

' oder' ist kein boolescher Operator, sondern ein Kontrollflussoperator in Ruby: http://devblog.avdi.org/2010/08/02/using-and -und-oder-in-rubin/ – orourkedd

+0

Leider kann das zweite Snippet Nebenwirkungen haben, wenn 'b' eine Methode ist (dh es wird zweimal aufgerufen). – Kelvin

3

Beachten Sie, dass Ruby spezifische Funktionen für die übliche null muss [] oder 0 oder 0.0 Koaleszenz.

Statt

x = y || [] # or... 
x = y || 0 

... Sie können (weil sie NilClass implementiert) tun nur ...

x = y.to_a # => [] or .. 
x = y.to_i # or .to_f, => 0 

Dieses wie bestimmte gemeinsame Entwurfsmuster macht:

(x || []).each do |y| 

... ein bisschen schöner aussehen:

x.to_a.each do |y| 
+1

Sie werden das auch oft als '[* x] .each do | y |' sehen. –