Bagaimana untuk menggunakan generik dengan jenis tersuai?

王林
Lepaskan: 2024-02-09 15:50:09
ke hadapan
1138 orang telah melayarinya

Bagaimana untuk menggunakan generik dengan jenis tersuai?

editor php Baicao memperkenalkan anda cara menggunakan generik dan jenis tersuai bersama-sama. Generik ialah teknik yang biasa digunakan dalam pengaturcaraan untuk menjadikan kod lebih fleksibel dan boleh digunakan semula. Jenis tersuai ialah jenis data yang ditakrifkan oleh pembangun sendiri berdasarkan keperluan perniagaan. Apabila kita perlu menggunakan generik dalam jenis tersuai, kita boleh melakukannya melalui kelas generik atau antara muka generik. Dengan menggunakan jenis generik dan tersuai secara rasional, kami boleh meningkatkan kebolehselenggaraan dan kebolehskalaan kod dengan lebih baik. Dalam artikel berikut, kami akan memperincikan kaedah dan pertimbangan khusus untuk menggunakan generik dengan jenis tersuai.

Kandungan soalan

Saya benar-benar keliru tentang bagaimana peraturan generik berfungsi. Saya hanya mahu fungsi menerima pelbagai jenis tersuai dan mempunyai logik yang berbeza untuk setiap jenis.

type myObjOne struct {
    myfield        string
}

type myObjTwo struct {
    myObjTwo
    myOtherField   string
}

type Generic interface {
    myObjOne | myObjTwo
}

func derp[T Generic](c T) {
    switch any(c).(type) {
    case myObjOne:
        // I can't access the fields of my types like this
        c.myfield = "sdfsfsdfdsf"
    case myObjTwo:
        c.myOtherField = "sdfsfsdfdsf"
    }
    return
}
Salin selepas log masuk

Mengapa c.myfield membuang c.myfield undefined (jenis T tidak mempunyai medan atau kaedah myfield) compilerMissingFieldOrMethod? c.myfield 抛出 c.myfield 未定义(类型 T 没有字段或方法 myfield)compilerMissingFieldOrMethod

解决方法

c 是类型 T

Penyelesaian

ccc adalah daripada jenis T, bukan hasil penegasan jenis. Dibetulkan dengan memberikan hasil penegasan jenis kepada pembolehubah.

func derp[T Generic](c T) {
    switch c := any(c).(type) {
    case myObjOne:
        // I can't access the fields of my types like this
        c.myfield = "sdfsfsdfdsf"
    case myObjTwo:
        c.myOtherField = "sdfsfsdfdsf"
    }
    return
}
Salin selepas log masuk
🎜Kod ini mengisytiharkan pembolehubah kedua dalam suis jenis 🎜 yang jenisnya bergantung pada cawangan suis. 🎜

Atas ialah kandungan terperinci Bagaimana untuk menggunakan generik dengan jenis tersuai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:stackoverflow.com
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