Maison  >  Article  >  développement back-end  >  Des classes imbriquées peuvent-elles exister dans des fonctions dans Go ?

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

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-04 14:26:01297parcourir

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>

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>

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!

Déclaration:
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