Arguments de tranche génériques : comprendre la distinction
Dans Go, la programmation générique introduit des paramètres de type qui permettent aux fonctions d'opérer sur différents types. Un domaine d'intérêt est la distinction entre les arguments de tranche limités aux types de tranche et les arguments de tranche génériques.
Argument de tranche contraint aux types de tranche
Considérez la fonction slices.Grow avec le premier argument contraint par ~[]E. Cela signifie que le type de cet argument doit être un type de tranche avec un type d'élément de E.
Argument de tranche générique
En revanche, considérez la fonction slices.Contient avec le premier argument simplement tapé comme []E. Cela autorise n'importe quel type de tranche avec un type d'élément de E.
Différences pratiques
Au départ, il peut sembler que ces deux types d'arguments de tranche se comportent de la même manière, car ils les deux permettent aux fonctions d'accéder aux opérations de tranche telles que l'ajout et la plage. Cependant, il existe une différence subtile mais importante lorsqu'il s'agit de renvoyer une tranche.
Renvoyer une tranche
Si la fonction nécessite de renvoyer une tranche du même type que la tranche d'entrée, vous devez utiliser un argument de tranche limité aux types de tranche (~[]E). Cela garantit que la tranche renvoyée a le type sous-jacent correct.
Exemple
Comparons deux implémentations de Grow() : l'une utilisant ~[]E et l'autre utilisant [ ]E.
func Grow[S ~[]E, E any](s S, n int) S {
// ...
}
func Grow2[E any](s []E, n int) []E {
// ...
}
Si nous transmettons une tranche d'un type personnalisé (par exemple, []MyInt), Grow() peut renvoyer une valeur de ce même type. Cependant, Grow2() ne peut renvoyer qu'un type de tranche générique ([]E).
Conclusion
En résumé, si vous devez renvoyer une tranche du même type type comme tranche d'entrée, vous devez utiliser un argument de tranche limité aux types de tranche (~[]E). Sinon, l’utilisation d’un argument slice générique est suffisante.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3