Rumah > pembangunan bahagian belakang > Golang > Pergi Panggilan Tertunda: Adakah Argumen Dinilai Serta-merta atau Selepas Perlaksanaan Fungsi?

Pergi Panggilan Tertunda: Adakah Argumen Dinilai Serta-merta atau Selepas Perlaksanaan Fungsi?

Mary-Kate Olsen
Lepaskan: 2024-12-06 00:44:11
asal
574 orang telah melayarinya

Go Deferred Calls: Are Arguments Evaluated Immediately or Upon Function Execution?

Argumen Panggilan Tertunda: Penilaian Segera lwn. Pelaksanaan Fungsi

Dalam Go, panggilan fungsi tertunda membolehkan anda melaksanakan kod selepas fungsi sekeliling kembali. Walau bagaimanapun, tingkah laku panggilan tertunda boleh mengelirukan jika anda tidak memahami cara hujah dikendalikan.

Penilaian lwn. Pelaksanaan

Petikan daripada "A Tour of Go" menyatakan bahawa "the hujah panggilan tertunda dinilai serta-merta, tetapi panggilan fungsi tidak dilaksanakan sehingga fungsi sekeliling kembali." Ini bermakna:

  • Penilaian: Apabila anda menangguhkan panggilan fungsi, nilai fungsi dan parameternya dinilai dan ditangkap. Ini berlaku apabila fungsi lampiran dipanggil.
  • Pelaksanaan: Selepas fungsi lampiran dikembalikan, fungsi tertunda dilaksanakan.

Penjelasan Contoh

Mari kita semak yang disediakan contoh:

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

Apabila main() dipanggil, perkara berikut berlaku:

  1. Pernyataan tangguh menilai hujah kepada def, iaitu rentetan malar "garis tertunda."
  2. Fungsi def dipanggil dengan "garis tertunda," mencetak "peringkat atas" dan "tertunda baris."
  3. Nilai pulangan def ialah fungsi yang mencetak "bersih." Fungsi ini belum lagi dilaksanakan.
  4. main() mencetak "utama."
  5. Setelah main() kembali, fungsi tertunda dilaksanakan, mencetak "bersihkan."

Kesimpulan

Memahami perbezaan antara penilaian hujah dan pelaksanaan fungsi adalah penting untuk menggunakan panggilan tertunda dengan berkesan dalam Go. Argumen dinilai serta-merta apabila pernyataan tangguh dilaksanakan, manakala badan fungsi hanya dilaksanakan apabila fungsi lampiran kembali. Ini membolehkan anda mengawal tertib tindakan dilakukan dan mengelakkan potensi isu yang berkaitan dengan tingkah laku fungsi yang tidak dijangka.

Atas ialah kandungan terperinci Pergi Panggilan Tertunda: Adakah Argumen Dinilai Serta-merta atau Selepas Perlaksanaan Fungsi?. 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