"Refresh" ein Lambda-Objekt

8

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

ausgibt %Vor%     
TeaOverflow 23.09.2014, 13:28
quelle

4 Antworten

17

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.

    
Deduplicator 23.09.2014, 13:51
quelle
2

Ich denke, was Sie wollen, könnte getan werden, indem Sie einen Generator haben, der verschiedene Zähler erfasst.

%Vor%

Wenn "zurücksetzen" bedeutet, dass Sie einen anderen Zähler möchten.

    
IdeaHat 23.09.2014 13:54
quelle
2

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.

%Vor%     
6502 24.09.2014 19:59
quelle
1

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.

    
Medo42 23.09.2014 13:51
quelle

Tags und Links