InhaltsverzeichnisKlicke auf den Link, um zur gewünschten Stelle zu navigieren
Dieser Inhalt wurde automatisch aus dem Ukrainischen übersetzt.
Memoization - ist, wenn Ruby das Ergebnis einer Berechnung "merkt", um es nicht erneut zu berechnen. Es wird zur Optimierung verwendet - besonders, wenn die Methode viele Male aufgerufen wird.
Wie funktioniert @x ||= ...
@x ||= fetch_x
bedeutet:
Wenn @x noch keinen Wert hat (d.h. nil oder false), dann führe fetch_x aus und speichere das Ergebnis in @x. Andernfalls - gib einfach das bereits gespeicherte zurück.
Unterschied zur einfachen Zuweisung
@x = fetch_x # führt fetch_x JEDES Mal aus @x ||= fetch_x # führt fetch_x nur beim ERSTEN Mal aus
Zum Beispiel:
def expensive puts "Berechne..." 42 end def answer @answer ||= expensive end answer # => Berechne... 42 answer # => 42 (ohne zweite Berechnung!)
Aber vorsichtig:
||= funktioniert nicht, wenn der Wert false sein kann:
@flag ||= true # wenn @flag = false, wird Ruby dies als "leer" betrachten und es auf true setzen
Wenn man sogar false speichern muss, ist es besser zu schreiben:
@flag = true if @flag.nil?
Dieser Beitrag hat noch keine Ergänzungen vom Autor.