Des classes imbriquées peuvent-elles exister dans des fonctions dans Golang ?
Golang autorise l'imbrication de structures dans des fonctions, mais pas de fonctions dans d'autres fonctions (à l'exclusion fonctions lambda). Cette limitation soulève la question de savoir s'il est possible de définir des classes imbriquées au sein de fonctions dans Golang.
Considérons l'exemple 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 ce cas, la tentative de lier la fonction foo à la classe imbriquée Cls échouera. Cela peut paraître surprenant, étant donné que les classes ne sont pas diminuées à l'intérieur des fonctions.
Les littéraux de fonction à la rescousse
Bien que l'imbrication de fonctions dans d'autres fonctions ne soit pas autorisée dans Golang, il y a est une solution de contournement utilisant des littéraux de fonction :
<code class="go">func f() { foo := func(s string) { fmt.Println(s) } foo("Hello World!") }</code>
Ici, nous créons une variable foo de type function, qui est déclarée dans une autre fonction f. L'appel de la fonction "externe" f produit : "Hello World!" comme prévu.
Cette solution nous permet d'obtenir un comportement similaire aux classes imbriquées dans les fonctions, bien qu'en utilisant un mécanisme différent.
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!