Bolehkah Kelas Bersarang Wujud Dalam Fungsi dalam Go?

Mary-Kate Olsen
Lepaskan: 2024-11-04 14:26:01
asal
353 orang telah melayarinya

Can Nested Classes Exist Within Functions in 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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

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