Empêcher un type de servir de clé de carte
Bien que certains types puissent intrinsèquement servir de clés de carte, un développeur peut souhaiter empêcher cela usage. Même si l’on suppose qu’un simple député interdirait de tels événements, cela s’avère insuffisant. Cet article explore la meilleure approche pour rendre un type inutilisable en tant que clé de carte.
Comparaison des types de clés de carte
Les spécifications techniques des types de carte exigent qu'elles soient capables de comparaison via les opérateurs == et !=. Cela implique que les types de clés ne doivent pas être des fonctions, des cartes ou des tranches. L'exploitation de cette exigence devient la clé pour empêcher l'utilisation des clés de mappage.
Présentation des champs incomparables
Les valeurs de structure, définies par leurs champs, ne sont comparables que si tous ces champs sont comparables. . Ainsi, l’introduction de champs de types incomparables disqualifie effectivement la structure de servir de clé de mappage. Une option pratique consiste à ajouter un champ de type slice, car ils sont explicitement déclarés comme incomparables.
Exemple de code
Considérez la modification suivante du type fourni :
<code class="go">type MyType struct { A *A b b notComparable []int }</code>
Avec l'inclusion du champ notComparable, une tentative d'utilisation de MyType comme clé de carte entraînera une erreur de compilation :
<code class="go">m := map[MyType]int{}</code>
Erreur de compilation : "clé de carte non valide tapez MyType"
Considérations supplémentaires
Il convient de noter que l'élimination de l'utilisation de la clé de mappage pour un type élimine également la possibilité de comparer ses valeurs. Cela est dû à l’introduction d’un domaine incomparable. Pour atténuer ce problème, un type wrapper peut être introduit pour masquer le champ incomparable tout en conservant la comparabilité du type d'origine.
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!