Ich möchte eine Funktion, die den lokalen Zustand in Ruby beibehält. Jedes Mal, wenn ich die Funktion aufrufe, möchte ich ein Ergebnis zurückgeben, das sowohl von einem aufrufenden Argument als auch von dem gespeicherten Zustand der Funktion abhängt. Hier ist ein einfaches Beispiel:
def inc_mult(factor)
@state ||= 0 # initialize the state the first time.
@state += 1 # adjust the internal state.
factor * @state
end
Beachten Sie, dass der Zustand beim ersten Mal initialisiert wird, aber nachfolgende Aufrufe auf den gespeicherten Zustand zugreifen. Dies ist gut, außer dass @state
auf den umgebenden Kontext übergreift, was ich nicht möchte.
Wie lässt sich dies am elegantesten umschreiben, so dass @state
nicht ausläuft?
(Anmerkung: Mein eigentliches Beispiel ist viel komplizierter, und die Initialisierung des Zustandes ist teuer.)