Maison > développement back-end > Golang > le corps du texte

Des classes imbriquées peuvent-elles exister dans des fonctions dans Go ?

Mary-Kate Olsen
Libérer: 2024-11-04 14:26:01
original
353 Les gens l'ont consulté

Can Nested Classes Exist Within Functions in Go?

Classes imbriquées dans une fonction dans Go : possibilités et limitations

Dans Go, les structures imbriquées dans les fonctions sont autorisées, mais la possibilité de créer des structures imbriquées les fonctions (au-delà des fonctions lambda) sont restreintes. Cela soulève la question : n'est-il vraiment pas possible de définir une classe imbriquée dans une fonction ?

Pour illustrer, considérons l'extrait de code suivant :

<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>
Copier après la connexion

Dans cet exemple, la tentative de définir une fonction foo en tant que membre de la structure imbriquée Cls échoue. Cette limitation peut sembler inhabituelle, compte tenu de la flexibilité offerte par les structures imbriquées.

Cependant, il est important de reconnaître que l'imbrication des fonctions dans Go est intrinsèquement interdite, que la fonction ait ou non un récepteur.

Pour contourner cette restriction, Go fournit des littéraux de fonction, qui permettent la déclaration de fonctions au sein d'autres fonctions, comme indiqué ci-dessous :

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

    foo("Hello World!")
}</code>
Copier après la connexion

Dans cet exemple, dans la fonction externe f, nous créons une variable de fonction foo . Cette variable stocke une fonction qui peut être appelée avec l'argument "Hello World!". Lorsque la fonction externe f est invoquée, « Hello World ! » est imprimé comme prévu.

Cette approche, utilisant des littéraux de fonction, permet l'émulation de classes imbriquées au sein de fonctions, bien que dans certaines contraintes.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal