Melalui Fungsi dengan Tandatangan Khusus dalam Go
Dalam Go, penunjuk fungsi boleh dihantar sebagai parameter, menyediakan mekanisme yang berkuasa untuk penggunaan semula kod dan fleksibiliti. Satu kes penggunaan biasa ialah menggunakan penghias, fungsi yang membalut fungsi lain untuk meningkatkan tingkah laku mereka. Walau bagaimanapun, had tertentu timbul apabila cuba menghantar fungsi dengan tandatangan tertentu.
Pertimbangkan senario berikut: anda ingin mencipta penghias bernama decorate() yang membungkus sebarang fungsi. Untuk kesederhanaan, mari kita anggap kita berurusan dengan fungsi yang mengambil tepat satu parameter dan mengembalikan satu nilai.
Satu pendekatan ialah mentakrifkan decorate() sebagai antara muka func(antara muka{}){} untuk menerima sebarang fungsi yang mengambil dan mengembalikan antara muka{}. Ini berfungsi dengan baik jika fungsi dalaman juga mengendalikan jenis antara muka{} (seperti dalam contoh funcA).
Walau bagaimanapun, persoalan timbul: adakah mungkin untuk mengubah fungsi sedia ada dengan lancar seperti rentetan funcB(rentetan), yang mengambil rentetan dan mengembalikan rentetan, ke dalam format yang serasi dengan decorate() tanpa membungkusnya secara tanpa nama fungsi?
Had Penukaran Fungsi
Malangnya, melakukan penukaran sedemikian tidak boleh dilaksanakan dalam Go. Ini berpunca daripada perbezaan asas dalam cara parameter diluluskan dalam fungsi. Fungsi menerima struct sebagai argumen menerima ahli individunya, manakala fungsi menerima antara muka yang mengandungi struct menerima jenis struct dan penunjuk kepadanya.
Fungsi Penyesuai sebagai Penyelesaian
Tanpa penggunaan generik, satu-satunya cara untuk mencapai penukaran ini adalah melalui fungsi penyesuai. Fungsi ini bertindak sebagai perantara, merapatkan jurang antara fungsi asal dan tandatangan yang diperlukan penghias. Fungsi penyesuai akan menukar hujah fungsi asal kepada antara muka{} sebelum memanggilnya.
Dengan menggunakan fungsi penyesuai, pembangun boleh memanjangkan keupayaan penghias untuk menampung fungsi dengan tandatangan tertentu, memupuk kebolehgunaan semula kod dan kebolehlanjutan dalam aplikasi mereka.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melewati Fungsi dengan Tandatangan Khusus kepada Penghias Pergi Tanpa Pembalut Manual?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!