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!