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
DDDasal
2024-12-24 01:09:17176semak imbas

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
}

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
    }
}

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!

Kenyataan:
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