Ich habe mein Lambda so erstellt:
%Vor% Es zählt effektiv wie oft es aufgerufen wurde, weil es den erfassten i
speichert. Gibt es eine Möglichkeit, das Objekt zu "rekonstruieren", so dass es mit dem Anfangswert von i
beginnt?
Etwas in der Art von:
%Vor% so, dass der folgende Code 1 1
anstelle von 1 2
Schließen Sie einfach Ihre Lambda-Erstellung in ein Lambda, das Sie aufrufen können, wenn Sie das innere Lambda neu initialisieren müssen:
%Vor%Oder erstellen Sie einfach eine Kopie, um den Status beizubehalten, wann immer Sie möchten:
%Vor%Wenn Sie immer nur einen vollständigen Reset wünschen, speichern Sie sie natürlich zuerst als const-Objekt.
Sie können nicht auf die inneren Variablen zugreifen, die innerhalb eines Lambda kopiert wurden, aber das Lambda selbst kann.
Indem Sie ein Protokoll über den Aufruf erstellen, können Sie Befehle an das Lambda senden, um seinen Status zu ändern. Zum Beispiel:
%Vor% Hier verwende ich einen optionalen Parameter, der bei Übergabe von true
den Zähler auf den Anfangswert zurücksetzt.
Ich denke nicht, dass die Anfangswerte, die vom Lambda erfasst wurden, Teil seines Typs sein können, denn das würde bedeuten, dass bei jedem Ausführen des Codes (mit möglicherweise anderen Werten von i
) ein neuer Typ benötigt würde zur Laufzeit generiert werden.
Ich denke auch nicht, dass der Anfangszustand der erfassten veränderbaren Werte gespeichert wird, da dies zusätzlichen Speicher beanspruchen würde.
Zusammengefasst: Wenn Sie nur ein Lambda-Funktionsobjekt haben, das auf die Art und Weise erstellt wurde, die Sie beschrieben haben, glaube ich nicht, dass Sie den Originalzustand wiederherstellen können.
Wenn Sie jedoch den Code steuern, der das Funktionsobjekt generiert, können Sie es in eine Funktion ziehen und diese Funktion einfach erneut aufrufen. Oder Sie können eine Funktionsobjektklasse manuell erstellen, wie bereits von @NeilKirk vorgeschlagen.