Heim  >  Artikel  >  Backend-Entwicklung  >  Wie behebt man Abschlussprobleme beim Planen von Jobs in einer For-Schleife?

Wie behebt man Abschlussprobleme beim Planen von Jobs in einer For-Schleife?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-24 19:25:13698Durchsuche

How to Fix Closure Issues When Scheduling Jobs in a For Loop?

Beheben von Abschlussproblemen in For-Schleifen: Variable kann keiner anonymen Funktion zugewiesen werden

Im Zusammenhang mit der Erstellung eines Aufgabenplans ist ein Problem aufgetreten Dabei wurde bei geplanten Jobs die Beschreibung des zuletzt iterierten Jobs anstelle ihrer eigenen gedruckt. Dieses Problem ist auf die Verwendung anonymer Funktionen innerhalb einer for-Schleife zurückzuführen.

Die Herausforderung ergibt sich aus der Tatsache, dass alle Abschlüsse in Ihrer Schleife dieselbe Variable (in Ihrem Fall die Jobvariable) gemeinsam genutzt haben. Während Sie die Schleife durchlaufen haben, wurde die Variable mit den Daten des nächsten Jobs überschrieben.

Um dieses Problem zu beheben, haben Sie versucht, die Jobvariable als Argument an die anonyme Funktion zu übergeben, haben aber eine Fehlermeldung erhalten Funktionen mit Parametern haben einen anderen Typ als solche ohne Parameter.

Die empfohlene Lösung besteht darin, für jede Iteration der Schleife eine neue Variable (in Ihrem Fall realJob) zu erstellen, um einen eindeutigen Verweis auf jeden Job beizubehalten. Dadurch vermeiden Sie das Abschlussproblem und stellen sicher, dass jeder geplante Job seine eigene korrekte Beschreibung druckt.

Hier ist der überarbeitete Code:

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!")
}

Das obige ist der detaillierte Inhalt vonWie behebt man Abschlussprobleme beim Planen von Jobs in einer For-Schleife?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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