Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Kita Boleh Mencontohi Fungsi fmap dalam Go Sambil Mengekalkan Keselamatan Jenis?
Dalam pelbagai bahasa pengaturcaraan, seperti Haskell, fmap ialah alat yang tidak ternilai untuk menggunakan fungsi pada struktur data sambil mengekalkan jenisnya. Walau bagaimanapun, melaksanakan persamaan langsung fmap dalam Go memberikan cabaran unik kerana generik berasaskan kaedahnya. Timbul persoalan: bagaimana kita boleh mencontohi fungsi fmap dalam Go tanpa menjejaskan keselamatan jenis?
had Go Generics
Malangnya, sistem generik Go sekarang tidak sesuai dengan baik untuk meniru secara langsung fmap melalui kaedah. Parameter kaedah tidak boleh memperkenalkan parameter jenis baharu, yang membawa kepada ralat tidak padan jenis yang disebut dalam soalan.
Pendekatan Alternatif
Walaupun mungkin menarik untuk menggunakan pendekatan kaedah yang serupa kepada Haskell, pertimbangan berikut membawa kepada alternatif yang lebih digalakkan:
Melaksanakan fmap sebagai Fungsi Peringkat Atas
Cara yang disyorkan untuk mencontohi fmap dalam Go adalah untuk mentakrifkannya sebagai fungsi peringkat atas di luar sebarang jenis. Berikut ialah contoh:
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 lebih sejajar dengan generik berasaskan kaedah Go sambil mengekalkan keselamatan jenis dan kebolehbacaan.
Kesimpulan
Walaupun mungkin menarik untuk menterjemah secara langsung konsep daripada bahasa lain ke dalam Go, adalah penting untuk mempertimbangkan batasan yang wujud pada Go bahasa. Dengan menerima pendekatan berasaskan Go yang lebih idiomatik untuk meniru fmap, kami boleh mencapai kefungsian yang diingini sambil mematuhi prinsip reka bentuk Go.
Atas ialah kandungan terperinci Bagaimanakah Kita Boleh Mencontohi Fungsi fmap dalam Go Sambil Mengekalkan Keselamatan Jenis?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!