Memahami Fungsi Berparameter dalam Go
Dalam Go, lulus berfungsi sebagai parameter memperkenalkan kekangan tertentu disebabkan oleh sistem jenis bahasa. Artikel ini meneroka had dan penyelesaian yang berpotensi untuk menghantar fungsi yang menerima jenis data tertentu ke dalam penghias.
Fungsi Menghias dalam Go
Pertimbangkan contoh fungsi penghias yang boleh balut mana-mana fungsi sedia ada. Untuk kesederhanaan, fungsi ini menerima dan mengembalikan satu nilai. Penghias boleh menerima argumen jenis func(antara muka{}){}, yang berfungsi dengan baik dengan fungsi menerima dan mengembalikan antara muka, seperti funcA.
Dilema Penukaran Jenis
Walau bagaimanapun , persoalan timbul: bolehkah fungsi seperti funcB, yang menerima rentetan dan mengembalikan rentetan, ditukar kepada func(antara muka{}) jenis antara muka{}? Jawapannya tidak.
Penjelasan
Dalam Go, lulus parameter melibatkan tandatangan fungsi yang sepadan. Fungsi yang mengharapkan rentetan sebagai hujah tidak akan menerima antara muka{} tanpa penghantaran jenis eksplisit. Argumen antara muka{} membenarkan julat nilai yang luas tetapi tidak menukar secara automatik kepada jenis tertentu, seperti rentetan.
Penyelesaian: Fungsi Penyesuai
Untuk merapatkan ini jurang, kita boleh memperkenalkan fungsi penyesuai yang menukar rentetan input kepada antara muka{} dan kemudian memanggil funcB. Fungsi penyesuai ini kemudiannya boleh dihantar ke dalam fungsi penghias, kerana ia mematuhi jenis yang dijangkakan.
Kesimpulan
Walaupun mustahil untuk menukar fungsi sewenang-wenangnya kepada fungsi generik (antara muka{}) jenis antara muka{} tanpa generik dalam Go, menggunakan fungsi penyesuai menyediakan penyelesaian. Pendekatan ini membolehkan kami menyepadukan fungsi bukan antara muka dengan lancar ke dalam penghias yang boleh meningkatkan fungsinya.
Atas ialah kandungan terperinci Bolehkah Go Decorators Mengendalikan Fungsi dengan Jenis Data Tertentu Tanpa Generik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!