Comment les valeurs de retour nommées interagissent avec les fonctions différées
Dans Go, les valeurs de retour nommées permettent aux fonctions de spécifier les valeurs de retour par nom au lieu d'utiliser la position. arguments. L'interaction entre les valeurs de retour nommées et les fonctions différées peut prêter à confusion, comme le montre l'exemple suivant :
func c() (i int) { defer func() { i++ }() return 1 }
Cette fonction devrait renvoyer 2, selon la documentation : "Les fonctions différées peuvent lire et attribuer à les valeurs de retour nommées de la fonction qui renvoie." Cependant, dans ce cas, la fonction renvoie 1, ce qui semble contredire la documentation.
Pour comprendre ce comportement, il est important de se rappeler qu'une instruction return sans arguments renvoie les valeurs de retour nommées, appelées "nues " retour. L'exemple de code renvoie 1 car il utilise return 1, qui attribue explicitement la valeur de retour à 1.
La fonction différée est exécutée après l'instruction return, en incrémentant i. Cependant, cet incrément n'affecte pas la valeur de retour nommée i, car il attribue effectivement la nouvelle valeur à une variable locale au sein de la fonction différée.
En effet, le retour 1 est équivalent à :
i = 1 return
Dans une fonction avec une variable de valeur de retour nommée i, l'affectation i = 1 définit la valeur de retour nommée, tandis que l'instruction return quitte simplement la fonction, permettant à la fonction différée d'exécuter et de modifier la variable i locale sans affectant la valeur de retour nommée.
Par conséquent, la fonction c renvoie en fait 1, malgré l'utilisation d'une fonction différée pour incrémenter i.
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!