Rumah > pembangunan bahagian belakang > Golang > Adakah Go Capture For-Gelung Pembolehubah sebagai Nilai atau Pembolehubah?

Adakah Go Capture For-Gelung Pembolehubah sebagai Nilai atau Pembolehubah?

DDD
Lepaskan: 2024-12-24 01:09:17
asal
134 orang telah melayarinya

Does Go Capture For-Loop Variables as Values or Variables?

Penutupan Ditangkap (untuk pembolehubah gelung) dalam Go

Adakah pembolehubah untuk gelung dalam Go tidak ditangkap sebagai pembolehubah penutupan yang diperuntukkan secara setempat?

Tidak, pembolehubah untuk gelung yang ditangkap dalam Go secara lalai ditangkap sebagai nilai, bukan pembolehubah. Tingkah laku ini berbeza daripada bahasa seperti C#, yang memerlukan sintaks tambahan untuk menangkap pembolehubah dan bukannya nilai.

Contoh: Menangkap Pembolehubah Gelung sebagai Nilai

package main

import "fmt"

func main() {
    a := 1
    b := func() { fmt.Println(a) } // b captures the value of a, not the variable itself
    a++
    b() // prints 1, not 2
}
Salin selepas log masuk

Dalam contoh ini , fungsi b menangkap nilai a pada masa ia ditakrifkan, dan bukannya mengekalkan rujukan kepada pembolehubah itu sendiri. Akibatnya, sebarang perubahan yang dibuat kepada a selepas mentakrifkan b tidak akan ditunjukkan dalam nilai yang dicetak oleh b.

Contoh: Menangkap Pembolehubah Gelung sebagai Pembolehubah

Walau bagaimanapun, ia adalah mungkin untuk menangkap pembolehubah gelung sebagai pembolehubah dengan menggunakan sintaks penutupan yang mencipta skop baharu untuk setiap satu lelaran:

package main

import "fmt"

func main() {
    a := 1
    for a < 10 {
        b := func() { fmt.Println(a) } // b captures the variable a in a new scope
        a++
        b() // prints 2, 3, 4, ..., 10
    }
}
Salin selepas log masuk

Dalam contoh ini, kata kunci func digunakan untuk membuat penutupan bagi setiap lelaran gelung. Teknik ini memastikan bahawa setiap penutupan menangkap rujukan unik kepada pembolehubah gelung, membolehkan kami memerhati nilai a apabila ia berubah dalam gelung.

Kesimpulan

Pergi menangkap pembolehubah untuk gelung sebagai nilai secara lalai, tetapi ia juga menyediakan sintaks penutupan yang membenarkan pembolehubah gelung untuk ditangkap sebagai pembolehubah. Memahami perbezaan ini adalah penting untuk mengelakkan kekeliruan dan menulis kod Go yang betul dan cekap.

Atas ialah kandungan terperinci Adakah Go Capture For-Gelung Pembolehubah sebagai Nilai atau Pembolehubah?. 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