解决“无法在 for 循环中将变量分配给匿名函数”中的闭包赋值问题
在构建任务调度程序的上下文中,无法在 for 循环中将变量分配给匿名函数可能会导致意外行为。当匿名函数捕获在其范围之外定义的变量时,会出现此问题,从而导致意外或不正确的结果。
在提到的特定场景中,正在基于包含作业名称和间隔的配置文件创建调度程序。每个作业都使用“cron”库进行调度,这需要指定一个 cron 表达式和要执行的函数。但是,代码错误地迭代作业并将相同的匿名函数分配给每个调度程序,从而导致打印错误的作业描述。
要解决此问题,我们需要确保每个匿名函数捕获其预期变量。这可以通过为循环的每次迭代创建一个新变量来实现,如下所示:
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!") }
通过为每次迭代使用新变量,我们确保每个匿名函数捕获正确的作业对象,消除了它们都引用相同变量并导致意外结果的问题。这种方法提供了准确的作业描述并确保调度程序的预期行为。
以上是在For循环中调度作业时如何避免闭包分配问题?的详细内容。更多信息请关注PHP中文网其他相关文章!