Meniru fmap dalam Go
Semasa cuba meniru gelagat pemetaan fungsi fmap dalam Go menggunakan generik dan kaedah, pembangun mungkin menghadapi jenis isu inferens di mana pelaksanaan tidak boleh mengakses jenis generik yang ditakrifkan dalam antara muka. Ralat ini berpunca daripada pengehadan kaedah Go dalam menggunakan jenis berparameter sebagai argumen di luar jenis penerima.
Untuk menangani kekangan ini, penyelesaian biasa ialah melaksanakan fmap sebagai fungsi peringkat atas dan bukannya kaedah. Dengan mengisytiharkan fmap di luar definisi jenis, ia mendapat akses kepada jenis generik yang diperlukan, membenarkan kefungsian pemetaan yang betul.
Pertimbangkan contoh berikut:
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} }
Pendekatan ini mematuhi jenis Go sistem sementara masih menyediakan fungsi pemetaan yang dikehendaki, walaupun melalui strategi pelaksanaan yang berbeza. Walau bagaimanapun, adalah penting untuk mempertimbangkan kesesuaian menterjemah konsep daripada bahasa lain kepada Go dengan cara yang dirasakan semula jadi dalam ekosistem Go.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Meniru `fmap` Haskell dengan Berkesan dalam Go Menggunakan Generik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!