Was bedeutet der folgende Code in Ruby?
||=
Gibt es eine Bedeutung oder einen Grund für die Syntax?
Was bedeutet der folgende Code in Ruby?
||=
Gibt es eine Bedeutung oder einen Grund für die Syntax?
Diese Ruby-Lang-Syntax. Die richtige Antwort ist, in der Ruby-Lang-Dokumentation nachzusehen. Alle anderen Erklärungen vernebeln .
"ruby-lang docs Abgekürzte Zuweisung".
https://docs.ruby-lang.org/en/2.4.0/syntax/assignment_rdoc.html#label-Abbreviated+Aufgabe
a ||= b
ist dasselbe wie die Aussage a = b if a.nil?
ou a = b unless a
Aber zeigen alle 3 Optionen die gleiche Leistung? Mit Ruby 2.5.1 ist dies
1000000.times do
a ||= 1
a ||= 1
a ||= 1
a ||= 1
a ||= 1
a ||= 1
a ||= 1
a ||= 1
a ||= 1
a ||= 1
end
dauert auf meinem PC 0,099 Sekunden, während
1000000.times do
a = 1 unless a
a = 1 unless a
a = 1 unless a
a = 1 unless a
a = 1 unless a
a = 1 unless a
a = 1 unless a
a = 1 unless a
a = 1 unless a
a = 1 unless a
end
dauert 0,062 Sekunden. Das ist fast 40 % schneller.
und dann haben wir auch noch:
1000000.times do
a = 1 if a.nil?
a = 1 if a.nil?
a = 1 if a.nil?
a = 1 if a.nil?
a = 1 if a.nil?
a = 1 if a.nil?
a = 1 if a.nil?
a = 1 if a.nil?
a = 1 if a.nil?
a = 1 if a.nil?
end
was 0,166 Sekunden dauert.
Dies hat zwar im Allgemeinen keine nennenswerten Auswirkungen auf die Leistung, aber wenn Sie das letzte Quäntchen an Optimierung benötigen, sollten Sie dieses Ergebnis in Betracht ziehen. Nebenbei bemerkt: a = 1 unless a
ist für den Neuling leichter zu lesen, er ist selbsterklärend.
Anmerkung 1: Der Grund für die mehrfache Wiederholung der Zuweisungszeile ist, dass der Overhead der Schleife auf die gemessene Zeit reduziert werden soll.
Anmerkung 2: Die Ergebnisse sind ähnlich, wenn ich a=nil
vor jeder Zuweisung auf Null gesetzt.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.