Comprendre l'évaluation des arguments d'appel différé
Dans Go, l'instruction « différer » est souvent utilisée pour garantir que des actions spécifiques sont prises à la fin de une fonction environnante. Cependant, il est important de noter que les arguments passés à l'appel différé ne sont pas exécutés immédiatement.
Selon la Go Spec, "chaque fois qu'une instruction 'defer' s'exécute, la valeur de la fonction et les paramètres de l'appel sont évaluées comme d'habitude et enregistrées à nouveau mais la fonction réelle n'est pas invoquée."
Pour élaborer, la fonction à différer (la "fonction différée") et ses paramètres associés sont évalués immédiatement. Cependant, l'exécution réelle de la fonction différée est retardée jusqu'à ce que la fonction environnante se termine.
Explication de l'exemple
Considérez le code Go suivant :
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") }
Dans cet exemple :
Par conséquent, les arguments de l'appel de fonction différé (« ligne différée » dans ce cas) sont évalués immédiatement lorsque l'instruction defer est exécutée, configurant la fonction et ses arguments pour une exécution ultérieure.
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!