Empêcher les types de fonctionner comme clés de carte
Dans certains scénarios, il peut être indésirable qu'un type spécifique soit utilisé comme clé de carte . Même s'ils possèdent un membre privé, ces types peuvent toujours être utilisés à ce titre. Cet article explore les méthodes permettant d'éviter de tels événements.
La condition fondamentale pour qu'un type serve de clé de mappage est que tous ses champs doivent être comparables. Une solution efficace consiste à inclure un champ non comparable dans la structure de type. Les types tels que les tranches, les cartes et les fonctions ne peuvent pas être comparés, donc l'ajout d'un champ de ce type exclut effectivement l'utilisation du type englobant. comme clé de carte.
Par exemple :
type MyType struct { A *A b b preventUseAsKey []int }
Une tentative d'utilisation de MyType comme clé de carte :
m := map[MyType]int{}
entraînerait le temps de compilation suivant error :
invalid map key type MyType
Cependant, il est important de noter que cette approche comporte un inconvénient potentiel : elle rend le type non comparable. Cela signifie des opérateurs de comparaison (par exemple, ==, ! =) ne peut plus être appliqué au type modifié, ce qui peut avoir un impact sur certains cas d'utilisation.
Pour préserver la comparabilité tout en limitant l'utilisation des clés de carte, un type wrapper peut être utilisé. Le type wrapper intègre le type d'origine mais ajoute un champ non comparable. Cela permet d'effectuer des opérations de comparaison sur le type intégré tout en interdisant l'utilisation du type wrapper comme clé de mappage.
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!