Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Saya Boleh Melewati Fungsi dengan Tandatangan Khusus kepada Penghias Pergi Tanpa Pembalut Manual?

Bagaimanakah Saya Boleh Melewati Fungsi dengan Tandatangan Khusus kepada Penghias Pergi Tanpa Pembalut Manual?

DDD
Lepaskan: 2024-12-24 06:41:11
asal
199 orang telah melayarinya

How Can I Pass Functions with Specific Signatures to a Go Decorator Without Manual Wrapping?

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan