Bagaimana untuk Mengelakkan Masalah Tugasan Penutupan Apabila Menjadualkan Kerja dalam Gelung Untuk?

Linda Hamilton
Lepaskan: 2024-11-17 18:09:01
asal
541 orang telah melayarinya

How to Avoid Closure Assignment Problems When Scheduling Jobs in a For Loop?

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!")
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan