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
Lepaskan: 2024-12-25 17:39:16
asal
775 orang telah melayarinya

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

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

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!

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