Maison > développement back-end > Golang > le corps du texte

Voici quelques titres basés sur des questions qui correspondent au contenu de l'article : * Comment utiliser les types contraints comme arguments de fonction dans les génériques Go 1.18 : il s'agit d'un titre direct et informatif mettant en évidence le

Susan Sarandon
Libérer: 2024-10-28 09:57:29
original
236 Les gens l'ont consulté

Here are a few question-based titles that fit the article's content:

* How to Use Constrained Types as Function Arguments in Go 1.18 Generics:  This is a direct and informative title highlighting the core issue and solution.
* Go 1.18 Generics:  Why Can

Types contraints comme arguments de fonction dans les génériques Go 1.18

Les génériques de Go 1.18 offrent de puissantes contraintes de type, permettant aux développeurs de définir des types personnalisés avec comportement spécifique. Cependant, l'utilisation de ces types contraints comme arguments pour des fonctions attendant des types concrets peut entraîner des erreurs de compilation.

Problème :

Considérez l'exemple donné, où la structure Charmander est définie en tant que type générique avec un paramètre de type F. Lorsque vous tentez d'utiliser la puissance d'attaque de Charmander pour infliger des dégâts à l'aide de la méthode InflictDamage, le compilateur génère une erreur.

Message d'erreur :

cannot use c.AttackPower (variable of type float64 constrained by Float) as float64 value in argument to other.ReceiveDamage compiler(IncompatibleAssign)
Copier après la connexion

Cette erreur se produit car la méthode InflictDamage attend un argument float64, mais la variable AttackPower est d'un type contraint, F.

Solution :

Pour résoudre cette erreur, il est nécessaire d'utiliser des conversions de types. Le type contraint F peut être converti en float64 en convertissant explicitement sa valeur, comme indiqué dans le code révisé :

func (c *Charmander[T]) ReceiveDamage(damage float64) {
    c.Health -= T(damage)
}

func (c *Charmander[T]) InflictDamage(other Pokemon) {
    other.ReceiveDamage(float64(c.AttackPower))
}
Copier après la connexion

Ces conversions sont valides car float64 est compatible avec float32 et float64, les types autorisés par le tapez le paramètre F. Il est important de noter que la conversion explicite de F en float64 peut entraîner une perte de précision si F est instancié avec float32.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!