Classe imbriquée dans une fonction dans Go
Go permet l'imbrication de structures dans des fonctions à des fins d'encapsulation. Cependant, la question se pose : existe-t-il un mécanisme pour définir des classes imbriquées au sein des fonctions ?
Dans Go, les fonctions imbriquées ne sont pas autorisées, sauf pour les lambdas. Cette restriction soulève des inquiétudes quant à la fonctionnalité des classes au sein des fonctions.
Pour développer ce problème, l'exemple de code suivant illustre les limitations :
<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>
Ce code tente de créer une classe imbriquée Cls dans la fonction. f, mais la tentative de liaison de la méthode foo à Cls échoue. Il semble que les classes soient affaiblies au sein des fonctions.
Pour remédier à cette limitation, Go propose le concept de littéraux de fonction. Les littéraux de fonction vous permettent de déclarer une fonction et de l'affecter à une variable. En utilisant cette approche, vous pouvez créer quelque chose de similaire aux fonctions imbriquées :
<code class="go">func f() { foo := func(s string) { fmt.Println(s) } foo("Hello World!") }</code>
Dans cet exemple, une fonction littérale foo est créée et affectée à une variable dans la fonction f. L'appel de f génère "Hello World!" comme prévu.
Bien que les littéraux de fonction fournissent une solution de contournement pour les fonctions d'imbrication, il est important de noter qu'ils ne sont pas de véritables fonctions imbriquées et présentent certaines limitations par rapport aux classes imbriquées dans d'autres langages.
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!