Rumah > pembangunan bahagian belakang > Golang > Adakah ini kes penggunaan yang sah untuk generik?

Adakah ini kes penggunaan yang sah untuk generik?

PHPz
Lepaskan: 2024-02-06 08:10:12
ke hadapan
611 orang telah melayarinya

Adakah ini kes penggunaan yang sah untuk generik?

Kandungan soalan

Kini dalam kod saya, saya mempunyai sekumpulan kerja berulang yang kelihatan seperti ini.

type fp = func(arg1 string, arg2 int, arg3 []string) bool
func decorator(fp fp, arg1 string, arg2 int, arg3 []string) {
    // do some stuff prior to running fp
    res := fp(arg1, arg2, arg3)
    // do some other stuff depending on res
}
Salin selepas log masuk

Masalah saya ialah setiap kali saya ingin menambah jenis fp baharu dengan nombor/jenis parameter yang berbeza, saya perlu mentakrifkan semula kaedah ini, jadi saya akhirnya mentakrifkan semula penghias 4-5 kali dalam kod saya, dan mungkin perlu Do lebih. Saya mahu menggantikannya dengan penghias

type FP = func(a ...interface{}) bool
func Decorator(fp FP, argDetails interface{}) {
    // do stuff
    res := fp(a)
    // do other stuff
}
Salin selepas log masuk

Dan biarkan fp menegaskan jenisnya. Tetapi saya tidak pasti sama ada ini menyebabkan masalah/adalah kes penggunaan yang buruk kerana saya telah banyak melihat tentang tidak menggunakan antara muka/menyebabkan masalah prestasi.


Jawapan betul


Generik tidak membantu atas sebab tertentu, terutamanya generik sahaja membantu dengan jenis, bukan nombor parameter. Secara peribadi, saya akan mendekati masalah ini dengan cara yang berbeza:

func decorator(fp func()) {
    // do stuff
   fp()
    // do other stuff
}
Salin selepas log masuk

Panggilnya menggunakan penutupan:

var res sometype

decorator(func() {
    res = originalfunc(arg1, arg2, arg3)
})
Salin selepas log masuk

Ia agak bertele-tele di tapak panggilan, tetapi ia berfungsi sepenuhnya untuk sebarang tandatangan fungsi - sebarang nombor atau jenis parameter dan sebarang nombor atau jenis nilai pulangan. Ia juga berfungsi dengan panggilan kaedah. Nampaknya anda mungkin melakukan beberapa logik berdasarkan keputusan, jadi anda juga mungkin:

func Decorator(fp func() bool) {
    // do stuff
   res := fp()
    // do other stuff
}

var res someType

Decorator(func() bool {
    res = originalFunc(arg1, arg2, arg3)
    return res
})
Salin selepas log masuk

Walaupun fungsi yang dihias mempunyai lebih banyak nilai pulangan daripada bool itu atau jika anda ingin menggunakan logik lain (contohnya, jika ia mengembalikan ralat, anda mahu menggunakan != 转换为 bool),它仍然可以工作。 nil).

Atas ialah kandungan terperinci Adakah ini kes penggunaan yang sah untuk generik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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