Évaluation des arguments de fonction différée
Question : Une citation dans The Tour of Go indique que « les arguments de l'appel différé sont évalués immédiatement. Qu'est-ce que cela signifie et qu'est-ce qui est réellement évalué ?
Réponse :
Dans Go, les instructions defer retardent l'exécution d'une fonction jusqu'au retour de la fonction englobante. Cependant, l'évaluation des arguments de la fonction différée a lieu immédiatement.
Décomposition du processus d'évaluation :
La spécification indique que pour chaque instruction « defer » :
L'appel de fonction réel n'est exécuté qu'après le retour de la fonction environnante.
Exemple :
Considérez ce qui suit code :
func def(s string) func() { fmt.Println("tier up") fmt.Println(s) return func() { fmt.Println("clean up") } } func main() { defer def("defered line")() fmt.Println("main") }
Séquence d'évaluation :
Conclusion :
Lorsqu'une instruction defer est utilisée, les paramètres de la fonction différée sont évalués immédiatement. Ce processus garantit que la fonction a accès aux valeurs les plus récentes des variables lors de son exécution. Cependant, l'exécution réelle de la fonction différée est retardée jusqu'au retour de la fonction environnante.
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!