En Go, définir une structure avec un type récursif peut entraîner un "invalide erreur de type récursif". Cette erreur se produit lorsqu'une structure contient un champ du même type que la structure elle-même.
Par exemple, la définition de structure suivante n'est pas valide :
type Environment struct { parent Environment symbol string value RCFAEValue }
L'erreur se produit car le compilateur ne peut pas déterminer la taille de la structure. La taille d'un pointeur est connue, mais la taille d'une structure qui la contient est inconnue.
Pour résoudre ce problème, vous devez faire du champ parent un pointeur :
type Environment struct { parent *Environment // note that this is now a pointer symbol string value RCFAEValue }
Cela garantit que la taille de la structure Environment est connue et permet au compilateur de procéder à la compilation.
Après avoir mis à jour la définition de la structure, vous pouvez créer une structure d'environnement comme suit :
Environment{&fun_Val.ds, fun_Val.param, exp.arg_exp.interp(env)}
En utilisant l'opérateur &, vous obtenez l'adresse de la variable fun_Val.ds et lui attribuez dans le champ parent, qui est de type *Environnement.
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!