Touches de fonction dans Maps
Cet article explore les limitations de l'utilisation de fonctions comme touches de carte dans le langage de programmation Go.
Le problème
Considérez le code Go hypothétique suivant :
type Action func(int) func test(a int) { } func test2(a int) { } func main() { x := map[Action]bool{} x[test] = true x[test2] = false }
Si vous essayez de compiler ce code, vous rencontrerez une erreur indiquant que « clé de carte non valide tapez Action."
La réponse
La spécification du langage Go interdit explicitement l'utilisation de fonctions, de cartes et de tranches comme clés de carte. Plus précisément, la spécification indique :
"Les opérateurs de comparaison == et != doivent être entièrement définis pour les opérandes du type de clé ; ainsi, le type de clé ne doit pas être une fonction, une carte ou une tranche."
Cette restriction est en place car les opérateurs de comparaison d'égalité (== et !=) doivent être bien définis pour le type de clé. Les fonctions, les cartes et les tranches ne sont pas des types de clés appropriés car leur comparaison d'égalité n'est pas entièrement définie.
Conclusion
Bien qu'il puisse être tentant d'utiliser des fonctions comme clés de carte , cela n'est pas autorisé dans Go en raison de la nécessité de comparaisons d'égalité bien définies. Par conséquent, vous devez utiliser d'autres types appropriés, tels que des chaînes, des entiers ou des structures, comme clés 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!