Argumen Slice Generik lwn. Kekangan Jenis Slice
Dalam pakej kepingan percubaan Go, dua fungsi, Mengandungi dan Tumbuh, ambil hujah dengan jenis yang berbeza kekangan. Mengandungi mengambil jenis []E generik, manakala Grow mengekang jenis hujahnya menjadi kepingan (~[]E).
Kekangan Jenis
Kekangan jenis, dilambangkan dengan ~, memastikan bahawa jenis mematuhi antara muka atau set peraturan tertentu. Dalam Grow, kekangan ~[]E menguatkuasakan bahawa jenis hujah akhirnya mestilah hirisan dengan jenis elemen E.
Fungsi Setara?
Walaupun terdapat kekangan jenis yang berbeza , operasi yang tersedia dalam kedua-dua fungsi kelihatan hampir sama. Walau bagaimanapun, perbezaan praktikal utama muncul apabila fungsi mesti mengembalikan sekeping jenis yang sama dengan hujah input.
Mengembalikan Slices
Apabila mengembalikan sekeping jenis yang sama sebagai input, adalah penting untuk menggunakan kekangan jenis seperti ~[]E. Ini membenarkan fungsi untuk mengekalkan jenis hirisan input yang dinamakan.
Pertimbangkan dua versi Grow():
// Preserves named type func Grow[S ~[]E, E any](s S, n int) S {...} // Returns unnamed type func Grow2[E any](s []E, n int) []E {...}
Jika Grow() menerima jenis kepingan tersuai, ia boleh kembali sekeping jenis yang sama, manakala Grow2() akan sentiasa mengembalikan kepingan tanpa nama.
Demonstrasi
type MyInts []int x := MyInts{1} // Custom slice type x2 := Grow(x, 10) // Type preserved x3 := Grow2(x, 10) // Unnamed type
Dalam contoh ini, x2 akan menjadi sekeping taip MyInts, manakala x3 akan menjadi kepingan tanpa nama.
Kesimpulan
Apabila anda perlu mengekalkan jenis hirisan input yang dinamakan dalam nilai pulangan, adalah perlu untuk menggunakan kekangan jenis seperti ~[]E. Jika tidak, kepingan yang dikembalikan akan sentiasa menjadi jenis yang tidak dinamakan.
Atas ialah kandungan terperinci Apabila Mengembalikan Slice daripada Fungsi, Bagaimanakah Kekangan Slice Mempengaruhi Pemeliharaan Jenis?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!