Adakah Kefungsian Kelas Bersarang Tersedia Dalam Fungsi dalam Go?

Linda Hamilton
Lepaskan: 2024-11-04 06:14:28
asal
247 orang telah melayarinya

Is Nested Class Functionality Available Within Functions in Go?

Kelas Bersarang Di Dalam Fungsi dalam Go

Go membenarkan sarang struct dalam fungsi untuk tujuan pengkapsulan. Walau bagaimanapun, persoalan timbul: Adakah terdapat mekanisme untuk menentukan kelas bersarang dalam fungsi?

Dalam Go, fungsi bersarang tidak dibenarkan, kecuali untuk lambda. Sekatan ini menimbulkan kebimbangan tentang kefungsian kelas dalam fungsi.

Untuk mengembangkan isu ini, contoh kod berikut menggambarkan pengehadan:

<code class="go">func f() {
    // Nested struct Cls inside f
    type Cls struct {
        // ...
    }
    // Attempt to bind foo to Cls (fails)
    func (c *Cls) foo() {
        // ...
    }
}</code>
Salin selepas log masuk

Kod ini cuba mencipta Cls kelas bersarang dalam fungsi f, tetapi percubaan untuk mengikat kaedah foo kepada Cls gagal. Nampaknya kelas dilemahkan dalam fungsi.

Untuk menangani had ini, Go menyediakan konsep literal fungsi. Literal fungsi membolehkan anda mengisytiharkan fungsi dan menetapkannya kepada pembolehubah. Menggunakan pendekatan ini, anda boleh mencipta sesuatu yang serupa dengan fungsi bersarang:

<code class="go">func f() {
    foo := func(s string) {
        fmt.Println(s)
    }

    foo("Hello World!")
}</code>
Salin selepas log masuk

Dalam contoh ini, fungsi literal foo dicipta dan diperuntukkan kepada pembolehubah dalam fungsi f. Memanggil f mengeluarkan "Hello World!" seperti yang dijangkakan.

Walaupun literal fungsi menyediakan penyelesaian untuk fungsi bersarang, adalah penting untuk ambil perhatian bahawa ia bukan fungsi bersarang sebenar dan mempunyai had tertentu berbanding kelas bersarang dalam bahasa lain.

Atas ialah kandungan terperinci Adakah Kefungsian Kelas Bersarang Tersedia 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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!