Maison > développement back-end > Golang > Pourquoi une fonction différée ne parvient-elle pas à incrémenter une valeur de retour nommée dans Go ?

Pourquoi une fonction différée ne parvient-elle pas à incrémenter une valeur de retour nommée dans Go ?

Barbara Streisand
Libérer: 2024-12-25 17:39:16
original
778 Les gens l'ont consulté

Why Does a Deferred Function Fail to Increment a Named Return Value in Go?

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
}
Copier après la connexion

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
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal