Mencontohi fmap dalam Go: Pendekatan Praktikal
Dalam Go, meniru kuasa ekspresif kelas taip Haskell memberikan cabaran. Satu contoh sedemikian ialah emulasi fmap, operasi asas dalam pengaturcaraan berfungsi.
Cabaran
Pertimbangkan percubaan berikut untuk melaksanakan fmap dalam Go:
type S[A any] struct { contents A } type Functor[A any, B any] interface{ fmap(f func(A)B) B } func (x S[A]) fmap (f func(A)B) S[B] { x.contents = f(x.contents) return x }
Pelaksanaan ini gagal kerana kaedah Go tidak dapat memperkenalkan parameter jenis baharu. Akibatnya, kaedah fmap tidak boleh mengakses jenis B.
Penyelesaian Praktikal
Walaupun menggunakan generik dan kaedah untuk meniru kelas taip dalam Go mempunyai had, adalah mungkin untuk melaksanakan fmap sebagai fungsi peringkat atas:
func Fmap[A, B any](sa S[A], f func(A) B) S[B] { return S[B]{contents: f(sa.contents)} }
Pendekatan ini menyediakan kefungsian yang diingini tanpa kekangan sistem jenis Go. Walau bagaimanapun, adalah penting untuk menilai sama ada emulasi sedemikian sejajar dengan pendekatan idiomatik dalam Go.
Atas ialah kandungan terperinci Bagaimanakah Kita Boleh Meniru `fmap` Haskell dengan Berkesan dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!