Résolution des problèmes d'affectation de fermeture dans "Impossible d'attribuer une variable à une fonction anonyme dans la boucle for"
Dans le contexte de la création d'un planificateur de tâches, le l'incapacité d'attribuer des variables à des fonctions anonymes dans une boucle for peut provoquer un comportement involontaire. Ce problème se produit lorsque les fonctions anonymes capturent des variables définies en dehors de leur portée, conduisant à des résultats inattendus ou incorrects.
Dans le scénario spécifique mentionné, un planificateur est créé sur la base d'un fichier de configuration contenant des noms de tâches et des intervalles. Chaque tâche est planifiée à l'aide de la bibliothèque "cron", ce qui nécessite de spécifier une expression cron et une fonction à exécuter. Cependant, le code parcourt par erreur les tâches et attribue la même fonction anonyme à chaque planificateur, ce qui entraîne l'impression de descriptions de travail incorrectes.
Pour résoudre ce problème, nous devons nous assurer que chaque fonction anonyme capture sa variable prévue. Ceci peut être réalisé en créant une nouvelle variable pour chaque itération de la boucle, comme démontré ci-dessous :
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!") }
En utilisant une nouvelle variable pour chaque itération, nous garantissons que chaque fonction anonyme capture le bon objet de travail, éliminant le problème où ils faisaient tous référence à la même variable et provoquaient des résultats inattendus. Cette approche fournit des descriptions de poste précises et garantit le comportement prévu du planificateur.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!