sucht nach a
wenn a
truthy ist, kehrt a
, sonst a = b
erfolgt heißt Sie b
‚s-Wert a
zuweisen.
a = a || b
Dies ist eine Zuweisungsoperation. Hier weisen Sie a
einen Wert zu, unabhängig davon, welchen Wert es enthält. So ist a
gleich a || b
. Im zweiten Teil der Aussage suchen Sie nach a
. Wenn sein Wert truthy ist, weisen Sie ihn a
selbst zu, andernfalls weisen Sie den Wert b
a
zu.
TL; DR
a = a || b
zuweist Wert (je nach Zustand) zua
unabhängig von welchem Wert es hält.
a ||= b
Rückkehr a
wenn bereits vorhanden, tut sonst a = b
mit Beispiel erklären:
Sie von a || a = b
als a || (a = b)
denken kann. Nehmen wir nun a = 4
und b = 6
an.
Da nach der Rangfolge, ist dies eine Operation OR ist und seit Reihenfolge der Operationen für OR wird von links nach rechts wir mit ersten a
starten:
# lets call this Fig. 1
a || (a = b)
^
|
.
(here)
Diese a
hat 4 Wert, der ein truthy Wert ist . Daher stoppt die Auswertung dann und dort und 4
wird zurückgegeben. (Warum Hinweis:true || anything = true
)
Jetzt können a = nil
und b = 6
nehmen. Wir beginnen wieder am selben Ort (Abb. 1). Da a
nil
ist, was in Ruby falsch ist, bewegen wir uns auf die rechte Seite der ODER-Operation, d.h.a = b
# lets call this Fig. 2
a || (a = b)
^
|
.
(here)
Da dies eine Zuweisungsoperation, wird es noch ausgeführt werden, und wir werden am Ende 6
-a
zuweisen.
Zurück zu a = a || b
. Sie können dies als a = (a || b)
denken. Offensichtlich ist es eine Rangordnungsoperation. Da die Reihenfolge der Operationen für die Zuweisung von rechts nach links ist, wird zuerst ausgewertet.
# lets call this Fig. 3
a = (a || b)
^
|
.
(here)
Wenn a = 4
und b = 6
, a || b
kehrt 4
(wie oben erörtert). Sonst, wenn a = nil
und b = 6
, a || b
wird 6
zurückgeben.
Nun wird der Wert, der von dieser ||
Operation zurückgegeben wird, der ersten a
zugewiesen.
# lets call this Fig. 4
a = (a || b)
^
|
.
(here)
Might [diesen Artikel] lesen möchten (http://www.rubyinside.com/what-rubys-double-pipe-or-equals-really-does-5488.html). 'a || a = b ', 'a = a || b 'und' a || = b 'sind alle leicht unterschiedlich. – Oka