Invocations de fermeture dans Go
Dans Go, l'utilisation de parenthèses après le corps d'une fermeture ne se limite pas aux contextes de fermeture. Le concept de base qui régit ce comportement est que les expressions contenues dans des instructions différées doivent être des appels de fonction.
Littéraux de fonction avec fermetures
Considérons un littéral de fonction tel que func(ch chan int) { ch <- ACK }(), où les parenthèses suivent le corps de fermeture. Cette syntaxe enferme la fermeture dans un appel de fonction immédiatement invoqué. Cela permet à la fonction de s'exécuter lors de l'initialisation, en passant l'argument ReplyChan à la fermeture.
Déclarations différées
Dans les instructions différées, telles que defer func() { result } (), les parenthèses garantissent que l'expression incluse est un appel de fonction. Sans cette syntaxe, l'expression serait incomplète et ne constituerait pas un appel de fonction valide. La syntaxe des instructions différées exige donc que l'expression soit une invocation de fonction.
Orthogonalité avec les appels de fonction
Cette orthogonalité garantit la cohérence avec les appels de fonction en dehors des instructions différées. Par exemple, f(), où f est une valeur de fonction, représente une invocation de fonction qui renvoie une valeur. En revanche, f, sans parenthèses, représente la valeur de la fonction elle-même. Cette syntaxe parallèle s'applique également aux expressions dans les instructions différées.
Exécution de fermeture
Dans une fermeture définie dans une instruction différée, les parenthèses déterminent quand la fermeture s'exécutera. Par exemple, dans defer func() { fmt. Println(i) }(), la fermeture s'exécute immédiatement lorsque l'instruction defer est rencontrée, capturant la valeur actuelle de i. En revanche, defer func(n int) { fmt. Println(n) }(i) capture et imprime la valeur de i au moment de l'exécution de l'instruction defer, pas lorsque la fermeture s'exécute.
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!