Bagaimanakah Penyata `tunda` Go Mengendalikan Parameter Penutupan?

Patricia Arquette
Lepaskan: 2024-11-11 22:08:02
asal
655 orang telah melayarinya

How Does Go's `defer` Statement Handle Closure Parameters?

Penutupan "tunda" Go: Memahami Tangkapan Parameter Penutupan

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
Salin selepas log masuk

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:

  • Tunda penyataan menangguhkan pelaksanaan panggilan fungsi sehingga fungsi sekeliling kembali.
  • Apabila penutupan menangkap parameter, nilai parameter dibekukan pada masa penutupan dibuat.
  • Apabila penutupan tidak menangkap mana-mana pembolehubah luar, parameternya dinilai apabila penyataan penangguhan dilaksanakan.
  • Turutan pelaksanaan penyataan penangguhan ialah Terakhir-Masuk-Dahulu-Keluar (LIFO).

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!

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