Maison  >  Article  >  développement back-end  >  Pourquoi les fonctions anonymes dans les fermetures impriment-elles uniquement la description du dernier travail dans les boucles For ?

Pourquoi les fonctions anonymes dans les fermetures impriment-elles uniquement la description du dernier travail dans les boucles For ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-20 18:09:13137parcourir

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

Fonctions anonymes dans les boucles for avec fermetures

Lors de la planification de tâches à l'aide de la bibliothèque cron, une erreur courante se produit lors de l'itération dans une liste de tâches et tenter d'utiliser des fonctions anonymes dans la boucle. Cette erreur est particulièrement évidente lorsque chaque travail doit imprimer sa propre description unique, mais imprime à la place la description du dernier travail de la liste.

Le problème sous-jacent réside dans la façon dont les fonctions anonymes gèrent les variables. Lors d’une itération dans une liste, la variable de boucle prendra séquentiellement la valeur de chaque élément de la liste. Cependant, les fonctions anonymes au sein de la boucle sont liées à la variable de boucle d'origine, qui est partagée entre toutes les itérations. Cela signifie que toutes les fonctions anonymes finissent par utiliser la même valeur de la variable de boucle, ce qui entraîne l'impression plusieurs fois de la description du dernier travail.

Pour résoudre ce problème, il est nécessaire de créer une nouvelle variable à chaque itération. de la boucle, garantissant ainsi que chaque fonction anonyme possède sa propre instance de la variable. Cette technique évite les complications causées par les fermetures.

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

Avec cet ajustement, chaque travail aura sa propre description, imprimée correctement lorsque son heure prévue arrive.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn