Bolehkah Kelas Bersarang Wujud Dalam Fungsi di Golang?
Golang membenarkan penyarangan struct dalam fungsi, tetapi bukan fungsi dalam fungsi lain (tidak termasuk fungsi lambda). Had ini menimbulkan persoalan sama ada boleh mentakrifkan kelas bersarang dalam fungsi dalam Golang.
Pertimbangkan contoh berikut:
<code class="go">func f() { // Nested struct Cls within f type Cls struct { // ... } // Attempt to bind foo to Cls fails func (c *Cls) foo() { // ... } }</code>
Dalam kes ini, percubaan untuk mengikat fungsi foo kepada kelas bersarang Cls akan gagal. Ini mungkin kelihatan mengejutkan, memandangkan kelas tidak berkurangan di dalam fungsi.
Fungsi Literals to the Rescue
Walaupun fungsi bersarang dalam fungsi lain tidak dibenarkan di Golang, terdapat ialah penyelesaian menggunakan literal fungsi:
<code class="go">func f() { foo := func(s string) { fmt.Println(s) } foo("Hello World!") }</code>
Di sini, kami mencipta foo pembolehubah fungsi jenis, yang diisytiharkan dalam fungsi lain f. Memanggil fungsi "luar" f output: "Hello World!" seperti yang dijangkakan.
Penyelesaian ini membolehkan kami mencapai gelagat yang serupa dengan kelas bersarang dalam fungsi, walaupun menggunakan mekanisme yang berbeza.
Atas ialah kandungan terperinci Bolehkah Kelas Bersarang Wujud Dalam Fungsi di Golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!