Maison  >  Article  >  développement back-end  >  Passer un paramètre de type avec des contraintes exactes à une fonction avec ce paramètre ?

Passer un paramètre de type avec des contraintes exactes à une fonction avec ce paramètre ?

WBOY
WBOYavant
2024-02-05 23:48:11608parcourir

Passer un paramètre de type avec des contraintes exactes à une fonction avec ce paramètre ?

Contenu de la question

J'ai commencé à utiliser les génériques go et j'ai du mal à comprendre pourquoi ce code ne compile pas :

func f(string) {}

func xyz[T string](p T) {
    f(p) // Error! Cannot use 'p' (type T) as the type string
}

Dans la fonction xyz, pourquoi ne pouvons-nous pas supposer que t a une contrainte de type telle que t soit de type chaîne ?

Je sais que je pourrais simplement écrire f(string(p)), mais je suis toujours intéressé par la réponse à la question.


Bonne réponse


Cela est dû aux règles de assignabilité, qui dans votre cas spécifique est la dernière règle.

v est un paramètre de type, t n'est pas un type nommé , et une valeur de chaque type dans l'ensemble de types de v peut être attribuée à t.

Le type string est un string 是一个命名类型,因此,尽管 t 类型集中的每个类型都可分配给 string,但类型参数 t 本身不可分配给 stringtype nommé

, donc bien que chaque type de l'ensemble de types t soit attribuable à string, les paramètres de type t lui-même n'est pas attribuable à string.

Vous pouvez le comparer aux types sans nom

. 🎜
func f([]string) {}

func xyz[T []string](p T) {
    f(p) // no issue
}

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer