Spis treściKliknij link, aby przejść do wybranego miejsca
Ta treść została automatycznie przetłumaczona z ukraińskiego.
Memoizacja - to kiedy Ruby "zapamiętuje" wynik obliczenia, aby nie liczyć go ponownie. Używane do optymalizacji - szczególnie, gdy metoda jest wywoływana wiele razy.
Jak działa @x ||= ...
@x ||= fetch_x
oznacza:
Jeśli @x nie ma jeszcze wartości (czyli nil lub false), wtedy wykonaj fetch_x i zapisz wynik w @x. W przeciwnym razie - po prostu zwróć już zapisane.
Różnica z prostym przypisaniem
@x = fetch_x # wykonuje fetch_x KAŻDY raz @x ||= fetch_x # wykonuje fetch_x tylko PIERWSZY raz
Na przykład:
def expensive puts "Obliczanie..." 42 end def answer @answer ||= expensive end answer # => Obliczanie... 42 answer # => 42 (bez obliczeń po raz drugi!)
Ale ostrożnie:
||= nie zadziała, jeśli wartość może być false:
@flag ||= true # jeśli @flag = false, Ruby uzna to za "puste" i nadpisze na true
Jeśli trzeba zachować nawet false, lepiej napisać:
@flag = true if @flag.nil?
Ten post nie ma jeszcze żadnych dodatków od autora.