Comprendre ""impossible de prendre l'adresse de"" et ""impossible d'appeler la méthode du pointeur sur"" dans Go
Malgré des fonctionnalités similaires des extraits de code, l'un compile et fonctionne tandis que l'autre génère des erreurs :
// This compiles and works diff := projected.Minus(c.Origin) dir := diff.Normalize() // This does not (yields the errors in the title) dir := projected.Minus(c.Origin).Normalize()
La disparité est attribuée à la différence entre les types de récepteurs pour la méthode Normalize().
Types de récepteurs dans les méthodes Go
Les méthodes Go peuvent avoir soit un récepteur de valeur, soit un récepteur de pointeur. Un récepteur de valeur opère sur une copie de la structure tandis qu'un récepteur de pointeur opère sur la structure d'origine elle-même.
Dans le cas de Normalize(), il dispose d'un récepteur de pointeur, nécessitant un pointeur vers une valeur Vector3 comme valeur. récepteur.
Adressage des variables et des valeurs de retour
Les variables dans Go sont adressables, ce qui signifie l'adresse du une variable peut être considérée comme passée comme argument à une méthode de réception de pointeur. Cependant, les valeurs de retour des appels de fonction et de méthode ne sont pas adressables.
Chaîne d'appels avec des récepteurs de pointeurs
Dans l'exemple où il compile, le compilateur prend automatiquement l'adresse de la variable diff pour correspondre au pointeur récepteur de Normalize().
Dans l'exemple où il ne compile pas, le compilateur ne peut pas automatiquement prendre l'adresse du valeur de retour de Minus() car elle n'est pas adressable. La valeur de retour étant une copie, elle doit d'abord être affectée à une variable, afin que son adresse puisse être prise.
Solutions de contournement
Plusieurs solutions de contournement existent pour résoudre le problème :
Cohérence des types de récepteurs et de résultats
Il est conseillé de maintenir la cohérence des types de récepteurs et de résultats tout au long d'un type personnalisé. Si la plupart des méthodes disposent de récepteurs pointeurs, toutes les méthodes doivent utiliser des récepteurs pointeurs. De même, si la plupart des méthodes renvoient des pointeurs, toutes les méthodes devraient renvoyer des pointeurs.
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!