Rumah > pembangunan bahagian belakang > Golang > Mengapa Fungsi Tanpa Nama dalam Penutupan Mencetak Penerangan Kerja Terakhir dalam For Loops sahaja?

Mengapa Fungsi Tanpa Nama dalam Penutupan Mencetak Penerangan Kerja Terakhir dalam For Loops sahaja?

Patricia Arquette
Lepaskan: 2024-11-20 18:09:13
asal
179 orang telah melayarinya

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

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

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!

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