Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Go Mengendalikan Penilaian Hujah Panggilan Fungsi Tertunda?

Bagaimanakah Go Mengendalikan Penilaian Hujah Panggilan Fungsi Tertunda?

DDD
Lepaskan: 2024-12-10 06:57:16
asal
786 orang telah melayarinya

How Does Go Handle Deferred Function Call Argument Evaluation?

Memahami Penilaian Hujah Panggilan Tertunda

Dalam Go, pernyataan "tangguh" sering digunakan untuk memastikan tindakan khusus diambil pada akhir fungsi sekeliling. Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa argumen yang dihantar kepada panggilan tertunda tidak dilaksanakan serta-merta.

Menurut Go Spec, "setiap kali pernyataan 'menunda' dilaksanakan, nilai fungsi dan parameter kepada panggilan dinilai seperti biasa dan disimpan semula tetapi fungsi sebenar tidak digunakan."

Untuk menghuraikan, fungsi yang akan ditangguhkan (yang "fungsi tertunda") dan parameter yang berkaitan dinilai serta-merta. Walau bagaimanapun, pelaksanaan sebenar fungsi tertunda ditangguhkan sehingga fungsi sekeliling selesai.

Contoh Penjelasan

Pertimbangkan kod Go berikut:

func def(s string) func() {
    fmt.Println("tier up")
    fmt.Println(s)
    return func(){ fmt.Println("clean up") }
}

func main() {
    defer def("defered line")()
    fmt.Println("main")
}
Salin selepas log masuk

Dalam contoh ini:

  • Nilai fungsi tertunda (def("garis tertunda")) dinilai, yang melibatkan panggilan def dengan hujah "garis tertunda". Ini mencetak "peringkat atas" dan hujah.
  • Nilai pulangan def, yang merupakan fungsi tanpa nama, ditangguhkan tetapi belum dilaksanakan lagi.
  • Kod selebihnya dalam utama (fmt.Println ("utama")) dilaksanakan.
  • Setelah utama kembali, fungsi tertunda dilaksanakan, mencetak "bersihkan".

Oleh itu, argumen panggilan fungsi tertunda ("baris tertunda" dalam kes ini) dinilai serta-merta apabila pernyataan tangguh dilaksanakan, menyediakan fungsi dan hujahnya untuk pelaksanaan kemudian .

Atas ialah kandungan terperinci Bagaimanakah Go Mengendalikan Penilaian Hujah Panggilan Fungsi Tertunda?. 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