Menggunakan Parameter Jenis dalam Kaedah Antara Muka
Dalam cuba melaksanakan struktur data generik dalam Go, anda mengalami ralat semasa mentakrifkan antara muka lelaran dengan kaedah mengambil parameter jenis. Artikel ini menangani isu dan menyediakan penyelesaian.
Ralat Definisi Antara Muka
Kod awal mentakrifkan antara muka dengan kaedah yang mengambil parameter jenis fungsi, yang membawa kepada ralat: "jenis fungsi tidak boleh mempunyai parameter jenis." Begitu juga, mengalihkan parameter jenis ke kaedah mengakibatkan ralat: "kaedah tidak boleh mempunyai parameter jenis."
Penyelesaian: Definisi Antara Muka Generik
Seperti yang dicadangkan oleh ralat , Methoden tidak boleh mempunyai parameter jenis khusus. Sebaliknya, penyelesaiannya adalah untuk menentukan parameter jenis pada jenis antara muka itu sendiri. Ini membolehkan anda menggunakan parameter jenis dalam kaedah dalam badan antara muka.
Kod yang diperbetulkan:
type Iterator[T any] interface { ForEachRemaining(action func(T) error) error // other methods }
Dengan parameter jenis yang ditakrifkan pada jenis antara muka, anda kini boleh menggunakannya dalam kaedah seperti yang dijangkakan:
type MyIterator[T any] struct { // implementation of the iterator } func (i *MyIterator[T]) ForEachRemaining(action func(T) error) error { // implementation of the ForEachRemaining method using T return nil }
Contoh Penggunaan
Contoh berikut menunjukkan penggunaan antara muka lelaran generik:
package main import ( "fmt" "collection" ) type MyIterator[T any] struct { // implementation of the iterator } func (i *MyIterator[T]) ForEachRemaining(action func(T) error) error { // implementation of the ForEachRemaining method using T return nil } func main() { myIterator := &MyIterator[int]{} _ = myIterator.ForEachRemaining(func(num int) error { fmt.Println(num) return nil }) }
Kod ini mentakrifkan lelaran generik, MyIterator, dan menggunakannya untuk lelaran pada sekeping integer, mencetak setiap nilai.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggunakan Parameter Jenis dalam Kaedah Antara Muka Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!