Dalam Go, pernyataan "tunda" membenarkan fungsi untuk menangguhkan pelaksanaan panggilan fungsi sehingga fungsi sekeliling kembali. Tingkah laku ini boleh membawa kepada hasil yang tidak dijangka apabila pernyataan penangguhan menangkap parameter penutupan.
Bahagian 2 lwn. Bahagian 3: Parameter yang Ditangkap
Pertimbangkan kod berikut:
for i := range whatever { defer func() { fmt.Println(i) }() } // part 2 for i := range whatever { defer func(n int) { fmt.Println(n) }(i) } // part 3
Bahagian 2:
Dalam "bahagian 2," pernyataan penangguhan mewujudkan penutupan yang menangkap pembolehubah "i." Apabila penutupan dilaksanakan, pembolehubah "i" mempunyai nilai yang dimilikinya dalam lelaran terakhir penyataan julat, iaitu 4. Oleh itu, output ialah "44444."
Bahagian 3:
Dalam "bahagian 3," pernyataan penangguhan mewujudkan penutupan yang tidak menangkap sebarang pembolehubah luar. Parameter "n" penutupan dinilai apabila pernyataan tangguh dilaksanakan, dan ia menerima nilai "i" pada masa itu. Ini menghasilkan output "43210" yang diingini kerana setiap panggilan fungsi tertunda menggunakan nilai yang berbeza untuk "n."
Isi Utama:
Memahami tangkapan tingkah laku penangguhan kenyataan adalah penting untuk mengelakkan hasil yang tidak dijangka dalam kod Go anda.
Atas ialah kandungan terperinci Bagaimanakah Penyata `tunda` Go Mengendalikan Parameter Penutupan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!