Maison >développement back-end >Golang >Comment puis-je émuler efficacement le « fmap » de Haskell dans Go en utilisant des génériques ?
Émulation de fmap dans Go
En essayant d'émuler le comportement de mappage fonctionnel de fmap dans Go à l'aide de génériques et de méthodes, les développeurs peuvent rencontrer un type problème d'inférence où l'implémentation ne peut pas accéder à un type générique défini dans l'interface. Cette erreur provient de la limitation des méthodes Go à utiliser des types paramétrés comme arguments au-delà du type récepteur.
Pour résoudre cette contrainte, la solution de contournement courante consiste à implémenter fmap en tant que fonction de niveau supérieur plutôt qu'en tant que méthode. En déclarant fmap en dehors de la définition de type, il accède aux types génériques nécessaires, permettant une fonctionnalité de mappage appropriée.
Considérez l'exemple suivant :
package main import "fmt" type S[A any] struct { contents A } func Fmap[A, B any](sa S[A], f func(A) B) S[B] { return S[B]{contents: f(sa.contents)} } func main() { ss := S[string]{"foo"} f := func(s string) int { return len(s) } fmt.Println(Fmap(ss, f)) // {3} }
Cette approche adhère au type de Go. système tout en fournissant la fonctionnalité de cartographie souhaitée, bien que via une stratégie de mise en œuvre différente. Cependant, il est crucial de considérer la pertinence de traduire les concepts d'autres langues vers Go d'une manière qui semble naturelle au sein de l'écosystème Go.
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!