Fungsi Tanpa Nama dalam untuk Gelung dengan Penutupan
Apabila menjadualkan tugas menggunakan pustaka cron, ralat biasa timbul apabila melelaran melalui senarai kerja dan cuba menggunakan fungsi tanpa nama dalam gelung. Ralat ini amat ketara apabila setiap kerja harus mencetak perihalan uniknya sendiri, tetapi sebaliknya mencetak perihalan tugas terakhir dalam senarai.
Isu asas terletak pada cara fungsi tanpa nama mengendalikan pembolehubah. Apabila melelaran melalui senarai, pembolehubah gelung akan mengambil nilai setiap elemen dalam senarai secara berurutan. Walau bagaimanapun, fungsi tanpa nama dalam gelung terikat kepada pembolehubah gelung asal, yang dikongsi antara semua lelaran. Ini bermakna bahawa semua fungsi tanpa nama akhirnya menggunakan nilai yang sama bagi pembolehubah gelung, menyebabkan perihalan tugas terakhir dicetak beberapa kali.
Untuk menyelesaikan isu ini, adalah perlu untuk mencipta pembolehubah baharu untuk setiap lelaran gelung, dengan itu memastikan bahawa setiap fungsi tanpa nama mempunyai contoh pembolehubahnya sendiri. Teknik ini menghalang komplikasi yang disebabkan oleh penutupan.
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 pelarasan ini, setiap kerja akan mempunyai penerangan tersendiri, dicetak dengan betul apabila tiba masa yang dijadualkan.
Atas ialah kandungan terperinci Mengapa Fungsi Tanpa Nama dalam Penutupan Mencetak Penerangan Kerja Terakhir dalam For Loops sahaja?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!