Rumah > pembangunan bahagian belakang > Golang > Mengapa Golang's For Loops Menghasilkan Output Berbeza Apabila Menggunakan Penutupan?

Mengapa Golang's For Loops Menghasilkan Output Berbeza Apabila Menggunakan Penutupan?

DDD
Lepaskan: 2024-12-14 19:42:17
asal
412 orang telah melayarinya

Why Do Golang's For Loops Produce Different Outputs When Using Closures?

Memahami Tingkah Laku Gelung Berbeza dalam Golang

Dalam kod ini, kami mencipta dua gelung untuk (gelung1 dan gelung2) yang berulang pada sekeping rentetan (cmds). Walau bagaimanapun, output yang terhasil daripada gelung ini berbeza.

Gelung1: Output Tidak Dijangka

Dalam gelung1, selepas lelaran melalui cmd, peta (tindakan) dicipta di mana setiap arahan dipetakan ke fungsi yang mencetak arahan. Apabila fungsi ini dilaksanakan, kesemuanya mencetak "kemas kini", yang merupakan elemen terakhir dalam cmd.

Gelung2: Output Diingini

Dalam gelung2, pendekatan yang serupa diambil, tetapi bukannya menyimpan rujukan arahan langsung dalam peta tindakan, salinan arahan dibuat menggunakan indeksnya. Ini memastikan bahawa setiap fungsi mempunyai salinan arahannya sendiri, menghalang output "kemas kini" yang tidak dijangka daripada gelung1.

Penjelasan

Tingkah laku pelik dalam gelung1 berlaku disebabkan oleh cara penutupan (fungsi disimpan dalam peta tindakan) pembolehubah gelung rujukan.

  • Dalam gelung1, cmd ialah pembolehubah gelung yang diubah suai dalam setiap lelaran. Apabila fungsi dicipta dalam gelung, mereka merujuk pembolehubah gelung ini.
  • Walau bagaimanapun, selepas gelung selesai, pembolehubah gelung cmd tidak lagi boleh diakses dan semua fungsi merujuk kepada nilai terakhir yang dipegangnya ("kemas kini" ).

Dengan membuat salinan pembolehubah gelung untuk setiap fungsi (seperti yang dilakukan dalam gelung2), setiap fungsi mempunyai pembolehubah terpencil sendiri yang tidak dipengaruhi oleh lelaran gelung seterusnya.

Kesimpulan

Contoh ini menyerlahkan kepentingan skop pembolehubah dalam Golang dan perbezaan antara pembolehubah gelung dan pembolehubah tertanggal yang dicipta melalui penyalinan. Apabila bekerja dengan penutupan yang merujuk pembolehubah gelung, adalah penting untuk memastikan salinan dibuat untuk mengelakkan tingkah laku yang tidak dijangka akibat penggunaan semula yang berubah-ubah.

Atas ialah kandungan terperinci Mengapa Golang's For Loops Menghasilkan Output Berbeza Apabila Menggunakan 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan