Définition d'une contrainte de type récursive à l'aide d'une interface prédéfinie
Dans les génériques Go2, les interfaces peuvent être utilisées pour spécifier des contraintes de type sur les types génériques. Cependant, le projet actuel ne fournit pas de moyen de forcer l'implémentation d'une méthode avec un argument de type générique lui-même.
Pour surmonter cette limitation, considérons l'approche suivante :
Définir une interface récursive :
type Lesser[T any] interface { Less(T) bool }
Définir une fonction avec un paramètre de type générique contraint par le récursif Interface :
func IsLess[T Lesser[T]](x, y T) bool { return x.Less(y) }
Utilisation :
type Apple int func (a Apple) Less(other Apple) bool { return a < other } type Orange int func (o Orange) Less(other Orange) bool { return o < other } func main() { fmt.Println(IsLess(Apple(10), Apple(20))) // true fmt.Println(IsLess(Orange(30), Orange(15))) // false }
Explication :
La contrainte de type T Lesser [T] garantit que le type générique T doit implémenter la méthode Less avec un argument de type T. Cela permet un type récursif contraintes.
Cette approche vous permet de définir des types personnalisés comme Apple et Orange qui implémentent leurs propres méthodes Less, remplissant la contrainte récursive et permettant l'utilisation de la fonction IsLess avec ces types personnalisés.
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!