Arguments génériques de tranche par rapport aux contraintes de type de tranche
Dans le package de tranches expérimentales de Go, deux fonctions, Contient et Grow, prennent des arguments de type différent contraintes. Contains prend le type générique []E, tandis que Grow contraint son type d'argument à être une tranche (~[]E).
Contraintes de type
Une contrainte de type, noté ~, garantit qu'un type est conforme à une interface spécifique ou à un ensemble de règles. Dans Grow, la contrainte ~[]E impose que le type d'argument soit finalement une tranche avec un élément de type E.
Fonctionnalité équivalente ?
Malgré les différentes contraintes de type , les opérations disponibles dans les deux fonctions semblent presque identiques. Cependant, une différence pratique clé apparaît lorsque les fonctions doivent renvoyer une tranche du même type que l'argument d'entrée.
Retour des tranches
Lors du retour d'une tranche du même type comme entrée, il est crucial d'utiliser une contrainte de type comme ~[]E. Cela permet à la fonction de conserver le type nommé de la tranche d'entrée.
Considérez deux versions de Grow() :
// Preserves named type func Grow[S ~[]E, E any](s S, n int) S {...} // Returns unnamed type func Grow2[E any](s []E, n int) []E {...}
Si Grow() reçoit un type de tranche personnalisé, il peut renvoyer une tranche du même type, tandis que Grow2() renverra toujours une tranche sans nom.
Démonstration
type MyInts []int x := MyInts{1} // Custom slice type x2 := Grow(x, 10) // Type preserved x3 := Grow2(x, 10) // Unnamed type
Dans cet exemple, x2 sera une tranche de tapez MyInts, tandis que x3 sera une tranche sans nom.
Conclusion
Lorsque vous devez conserver le type nommé d'une tranche d'entrée dans la valeur de retour, il est nécessaire pour utiliser une contrainte de type comme ~[]E. Sinon, la tranche renvoyée sera toujours d'un type sans nom.
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!