Utilisation des paramètres de type dans les méthodes d'interface
En essayant d'implémenter une structure de données générique dans Go, vous avez rencontré une erreur lors de la définition d'une interface d'itérateur avec une méthode prenant un paramètre de type. Cet article aborde le problème et propose une solution.
Erreur de définition d'interface
Le code initial définit une interface avec une méthode qui prend un paramètre de type de fonction, ce qui a conduit à l'erreur : "le type de fonction ne peut pas avoir de paramètres de type." De même, le déplacement du paramètre de type vers la méthode entraînait l'erreur : "les méthodes ne peuvent pas avoir de paramètres de type."
Solution : définition d'interface générique
Comme suggéré par l'erreur , Methoden ne peut pas avoir de paramètres de type dédiés. Au lieu de cela, la solution consiste à spécifier le paramètre type sur le type d’interface lui-même. Cela vous permet d'utiliser le paramètre type dans les méthodes du corps de l'interface.
Le code corrigé :
type Iterator[T any] interface { ForEachRemaining(action func(T) error) error // other methods }
Avec le paramètre type défini sur le type d'interface, vous pouvez désormais l'utiliser dans la méthode comme prévu :
type MyIterator[T any] struct { // implementation of the iterator } func (i *MyIterator[T]) ForEachRemaining(action func(T) error) error { // implementation of the ForEachRemaining method using T return nil }
Exemple d'utilisation
L'exemple suivant montre l'utilisation de l'interface de l'itérateur générique :
package main import ( "fmt" "collection" ) type MyIterator[T any] struct { // implementation of the iterator } func (i *MyIterator[T]) ForEachRemaining(action func(T) error) error { // implementation of the ForEachRemaining method using T return nil } func main() { myIterator := &MyIterator[int]{} _ = myIterator.ForEachRemaining(func(num int) error { fmt.Println(num) return nil }) }
Ce code définit un itérateur générique, MyIterator, et l'utilise pour parcourir une tranche d'entiers, en imprimant chaque valeur.
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!