l'éditeur php Baicao vous présente comment utiliser ensemble les génériques et les types personnalisés. Les génériques sont une technique couramment utilisée en programmation pour rendre le code plus flexible et réutilisable. Les types personnalisés sont des types de données définis par les développeurs eux-mêmes en fonction des besoins de l'entreprise. Lorsque nous devons utiliser des génériques dans un type personnalisé, nous pouvons le faire via des classes génériques ou des interfaces génériques. En utilisant rationnellement les génériques et les types personnalisés, nous pouvons mieux améliorer la maintenabilité et l'évolutivité du code. Dans les articles suivants, nous détaillerons les méthodes et considérations spécifiques à l’utilisation de génériques avec des types personnalisés.
Je suis vraiment confus quant au fonctionnement des règles des génériques. Je veux juste qu'une fonction accepte plusieurs types personnalisés et ait une logique différente pour chaque type.
type myObjOne struct { myfield string } type myObjTwo struct { myObjTwo myOtherField string } type Generic interface { myObjOne | myObjTwo } func derp[T Generic](c T) { switch any(c).(type) { case myObjOne: // I can't access the fields of my types like this c.myfield = "sdfsfsdfdsf" case myObjTwo: c.myOtherField = "sdfsfsdfdsf" } return }
Pourquoi c.myfield
lance-t-il le compilateur c.myfield non défini (le type T n'a pas de champ ni de méthode myfield)MissingFieldOrMethod
? c.myfield
抛出 c.myfield 未定义(类型 T 没有字段或方法 myfield)compilerMissingFieldOrMethod
?
c
是类型 T
c
。 c
c
est de type T
, pas le résultat d'une assertion de type. Corrigé en attribuant le résultat de l'assertion de type à une variable.
func derp[T Generic](c T) { switch c := any(c).(type) { case myObjOne: // I can't access the fields of my types like this c.myfield = "sdfsfsdfdsf" case myObjTwo: c.myOtherField = "sdfsfsdfdsf" } return }
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!