Rumah > Artikel > pembangunan bahagian belakang > Bolehkah Kelas Bersarang Wujud Dalam Fungsi dalam Go?
Kelas Bersarang dalam Fungsi dalam Go: Kemungkinan dan Had
Dalam Go, struktur bersarang dalam fungsi dibenarkan, tetapi keupayaan untuk mencipta bersarang fungsi (di luar fungsi lambda) adalah terhad. Ini menimbulkan persoalan: Adakah benar-benar tidak mungkin untuk mentakrifkan kelas bersarang dalam fungsi?
Untuk menggambarkan, pertimbangkan coretan kod 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 contoh ini, percubaan untuk tentukan fungsi foo sebagai ahli Cls struct bersarang gagal. Had ini mungkin kelihatan luar biasa, memandangkan fleksibiliti yang ditawarkan oleh struktur bersarang.
Walau bagaimanapun, adalah penting untuk menyedari bahawa fungsi bersarang dalam Go sememangnya tidak dibenarkan, tidak kira sama ada fungsi itu mempunyai penerima.
Untuk memintas sekatan ini, Go menyediakan literal fungsi, yang membenarkan pengisytiharan fungsi dalam fungsi lain, seperti yang dilihat di bawah:
<code class="go">func f() { foo := func(s string) { fmt.Println(s) } foo("Hello World!") }</code>
Dalam contoh ini, dalam fungsi luar f, kami mencipta pembolehubah fungsi foo . Pembolehubah ini menyimpan fungsi yang boleh dipanggil dengan hujah "Hello World!". Apabila fungsi luar f dipanggil, "Hello World!" dicetak seperti yang dijangkakan.
Pendekatan ini, menggunakan literal fungsi, membolehkan emulasi kelas bersarang dalam fungsi, walaupun dalam kekangan tertentu.
Atas ialah kandungan terperinci Bolehkah Kelas Bersarang Wujud Dalam Fungsi dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!