Rumah >pembangunan bahagian belakang >Golang >Mengapa Fungsi Tertunda Gagal Menaikkan Nilai Pulangan Dinamakan dalam Go?

Mengapa Fungsi Tertunda Gagal Menaikkan Nilai Pulangan Dinamakan dalam Go?

Barbara Streisand
Barbara Streisandasal
2024-12-25 17:39:16809semak imbas

Why Does a Deferred Function Fail to Increment a Named Return Value in Go?

Cara Nilai Pulangan Dinamakan Berinteraksi dengan Fungsi Tertunda

Dalam Go, nilai pulangan dinamakan membenarkan fungsi untuk menentukan nilai pulangan mengikut nama dan bukannya menggunakan kedudukan hujah. Interaksi antara nilai pulangan yang dinamakan dan fungsi tertunda boleh mengelirukan, seperti yang dilihat dalam contoh berikut:

func c() (i int) {
    defer func() { i++ }()
    return 1
}

Fungsi ini dijangka akan mengembalikan 2, menurut dokumentasi: "Fungsi tertunda boleh membaca dan menetapkan kepada nilai pulangan dinamakan fungsi pemulangan." Walau bagaimanapun, dalam kes ini, fungsi mengembalikan 1, yang nampaknya bercanggah dengan dokumentasi.

Untuk memahami tingkah laku ini, adalah penting untuk diingat bahawa pernyataan pulangan tanpa argumen mengembalikan nilai pulangan yang dinamakan, yang dikenali sebagai "naked "kembali. Kod contoh mengembalikan 1 kerana ia menggunakan pulangan 1, yang secara eksplisit memberikan nilai pulangan kepada 1.

Fungsi tertunda dilaksanakan selepas penyata pulangan, menambah i. Walau bagaimanapun, kenaikan ini tidak menjejaskan nilai pulangan yang dinamakan i, kerana ia secara berkesan memberikan nilai baharu kepada pembolehubah setempat dalam fungsi tertunda.

Ini kerana pulangan 1 bersamaan dengan:

i = 1
return

Dalam fungsi dengan pembolehubah nilai pulangan bernama i, tugasan i = 1 menetapkan nilai pulangan yang dinamakan, manakala pernyataan pulangan hanya keluar dari fungsi, membenarkan fungsi tertunda untuk melaksanakan dan mengubah suai pembolehubah i setempat tanpa menjejaskan nilai pulangan yang dinamakan.

Oleh itu, fungsi c sebenarnya mengembalikan 1, walaupun menggunakan fungsi tertunda untuk menambah i.

Atas ialah kandungan terperinci Mengapa Fungsi Tertunda Gagal Menaikkan Nilai Pulangan Dinamakan dalam Go?. 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