Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Adakah Kefungsian Kelas Bersarang Tersedia Dalam Fungsi dalam Go?

Adakah Kefungsian Kelas Bersarang Tersedia Dalam Fungsi dalam Go?

Linda Hamilton
Linda Hamiltonasal
2024-11-04 06:14:28250semak imbas

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>

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>

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!

Kenyataan:
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