Emulieren von fmap in Go
Beim Versuch, das funktionale Zuordnungsverhalten von fmap in Go mithilfe von Generika und Methoden zu emulieren, stoßen Entwickler möglicherweise auf einen Typ Inferenzproblem, bei dem die Implementierung nicht auf einen in der Schnittstelle definierten generischen Typ zugreifen kann. Dieser Fehler ist auf die Einschränkung von Go-Methoden zurückzuführen, parametrisierte Typen als Argumente über den Empfängertyp hinaus zu verwenden.
Um diese Einschränkung zu beheben, besteht die übliche Problemumgehung darin, fmap als Funktion der obersten Ebene und nicht als Methode zu implementieren. Durch die Deklaration von fmap außerhalb der Typdefinition erhält es Zugriff auf die erforderlichen generischen Typen und ermöglicht so eine ordnungsgemäße Zuordnungsfunktionalität.
Betrachten Sie das folgende Beispiel:
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} }
Dieser Ansatz folgt dem Typ von Go System und bietet dennoch die gewünschte Mapping-Funktionalität, wenn auch durch eine andere Implementierungsstrategie. Es ist jedoch von entscheidender Bedeutung, die Angemessenheit der Übersetzung von Konzepten aus anderen Sprachen in Go auf eine Art und Weise zu prüfen, die sich innerhalb des Go-Ökosystems natürlich anfühlt.
Das obige ist der detaillierte Inhalt vonWie kann ich Haskells „fmap' in Go mithilfe von Generics effektiv emulieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!