Closure Body Parentheses in Go
In Go, memahami penggunaan kurungan selepas badan penutupan boleh membingungkan. Mari kita mendalami konsep ini dengan mengkaji dua contoh.
Fungsi Literal:
Dalam contoh literal fungsi:
func(ch chan int) { ch <- ACK }(replyChan)
Kurungan serta-merta selepas badan penutup, (replyChan), gunakan fungsi literal dan hantar hujah replyChan kepada ia.
Tunda Penyata:
Dalam contoh penyata tangguh:
func f() (result int) { defer func() { result++ }() // why and how? return 0 }
Kurungan selepas badan penutup, (), bukan secara eksklusif berkaitan dengan penutupan tetapi merupakan sebahagian daripada sintaks pernyataan tangguh. Menurut spesifikasi bahasa Go, ungkapan dalam pernyataan tangguh mestilah sentiasa panggilan fungsi. Oleh itu, ia memerlukan tanda kurungan untuk menunjukkan bahawa penutupan digunakan serta-merta.
Kepentingan Sintaks Panggilan Fungsi:
Dalam Go, terdapat perbezaan yang jelas antara fungsi nilai dan panggilan fungsi. Nilai fungsi merujuk kepada definisi fungsi sebenar, manakala panggilan fungsi mewakili pelaksanaan fungsi.
Pertimbangkan kod berikut:
func f() int { return 42 } a := f // function value b := f() // function call
Dalam baris pertama, a diberikan nilai fungsi f, manakala dalam baris kedua, b diberikan hasil daripada memanggil f.
Begitu juga, dalam penangguhan pernyataan, ungkapan mestilah panggilan fungsi, bukan hanya nilai fungsi. Oleh itu, kurungan diperlukan untuk menunjukkan pemanggilan fungsi.
Nota Tambahan:
Kurungan juga boleh merangkumi senarai ungkapan, termasuk senarai kosong. Perbezaan ini penting kerana ia menentukan bila penutupan dilaksanakan dan dengan hujah yang mana.
Atas ialah kandungan terperinci Bilakah Tanda Kurung Diperlukan Selepas Badan Penutupan Pergi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!