Warum drucken anonyme Funktionen in Abschlüssen nur die Beschreibung des letzten Jobs in For-Schleifen?

Patricia Arquette
Freigeben: 2024-11-20 18:09:13
Original
122 Leute haben es durchsucht

Why Do Anonymous Functions in Closures Print Only the Last Job's Description in For Loops?

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!")
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage