Anonyme Funktionen in for-Schleifen mit Abschlüssen
Beim Planen von Aufgaben mithilfe der Cron-Bibliothek tritt beim Durchlaufen einer Jobliste ein häufiger Fehler auf und der Versuch, anonyme Funktionen innerhalb der Schleife zu verwenden. Dieser Fehler tritt besonders deutlich auf, wenn jeder Job seine eigene eindeutige Beschreibung drucken sollte, stattdessen aber die Beschreibung des letzten Jobs in der Liste gedruckt wird.
Das zugrunde liegende Problem liegt in der Art und Weise, wie anonyme Funktionen mit Variablen umgehen. Beim Durchlaufen einer Liste übernimmt die Schleifenvariable nacheinander den Wert jedes Elements in der Liste. Allerdings sind die anonymen Funktionen innerhalb der Schleife an die ursprüngliche Schleifenvariable gebunden, die von allen Iterationen gemeinsam genutzt wird. Dies bedeutet, dass alle anonymen Funktionen am Ende denselben Wert der Schleifenvariablen verwenden, was dazu führt, dass die Beschreibung des letzten Jobs mehrmals gedruckt wird.
Um dieses Problem zu beheben, muss für jede Iteration eine neue Variable erstellt werden der Schleife, wodurch sichergestellt wird, dass jede anonyme Funktion ihre eigene Instanz der Variablen hat. Diese Technik verhindert die durch Schließungen verursachten Komplikationen.
for _, job := range config.Jobs { realJob := job // a new variable each time through the loop c.AddFunc("@every "+realJob.Interval, func() { DistributeJob(realJob) }) log.Println("Job " + realJob.Name + " has been scheduled!") }
Mit dieser Anpassung verfügt jeder Auftrag über eine eigene Beschreibung, die korrekt gedruckt wird, wenn die geplante Zeit eintrifft.
Das obige ist der detaillierte Inhalt vonWarum drucken anonyme Funktionen in Abschlüssen nur die Beschreibung des letzten Jobs in For-Schleifen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!