Mengatasi Isu Tugasan Penutupan dalam "Tidak boleh menetapkan pembolehubah kepada fungsi tanpa nama dalam gelung untuk"
Dalam konteks membina penjadual tugas, ketidakupayaan untuk menetapkan pembolehubah kepada fungsi tanpa nama dalam gelung for boleh menyebabkan tingkah laku yang tidak diingini. Isu ini berlaku apabila fungsi tanpa nama menangkap pembolehubah yang ditakrifkan di luar skopnya, membawa kepada keputusan yang tidak dijangka atau tidak betul.
Dalam senario khusus yang dinyatakan, penjadual sedang dibuat berdasarkan fail konfigurasi yang mengandungi nama kerja dan selang waktu. Setiap kerja dijadualkan menggunakan perpustakaan "cron", yang memerlukan menyatakan ungkapan cron dan fungsi untuk dilaksanakan. Walau bagaimanapun, kod tersilap melelang ke atas kerja dan memberikan fungsi tanpa nama yang sama kepada setiap penjadual, yang membawa kepada huraian kerja yang salah dicetak.
Untuk menyelesaikannya, kita perlu memastikan bahawa setiap fungsi tanpa nama menangkap pembolehubah yang dimaksudkan. Ini boleh dicapai dengan mencipta pembolehubah baharu untuk setiap lelaran gelung, seperti yang ditunjukkan di bawah:
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!") }
Dengan menggunakan pembolehubah baharu untuk setiap lelaran, kami memastikan setiap fungsi tanpa nama menangkap objek kerja yang betul, menghapuskan isu di mana mereka semua merujuk pembolehubah yang sama dan menyebabkan keputusan yang tidak dijangka. Pendekatan ini menyediakan huraian kerja yang tepat dan memastikan tingkah laku yang dimaksudkan oleh penjadual.
Atas ialah kandungan terperinci Bagaimana untuk Mengelakkan Masalah Tugasan Penutupan Apabila Menjadualkan Kerja dalam Gelung Untuk?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!