Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Takrifkan jenis sebagai instantiasi jenis generik

Takrifkan jenis sebagai instantiasi jenis generik

WBOY
WBOYke hadapan
2024-02-10 12:50:08575semak imbas

Takrifkan jenis sebagai instantiasi jenis generik

PHP Editor Xigua akan memperkenalkan anda kepada konsep penting hari ini - mentakrifkan jenis sebagai instantiasi jenis generik. Dalam pengaturcaraan, generik ialah cara yang fleksibel untuk menulis kod umum tanpa menyatakan jenis tertentu. Dengan mentakrifkan jenis sebagai instantiasi jenis generik, kami boleh menentukan jenis tertentu apabila menggunakannya, menjadikan kod itu lebih fleksibel dan boleh digunakan semula. Seterusnya, mari kita selami konsep ini dan lihat cara melaksanakan generik dalam PHP.

Kandungan soalan

Dalam contoh di bawah, saya cuba mentakrifkan jenis PreciseAdder untuk memudahkan penggunaan jenis generik instantiated. Malangnya, pengkompil go nampaknya berfikir bahawa kaedah yang ditakrifkan pada jenis generik tidak boleh digunakan untuk jenis PreciseAdder. Saya tahu saya boleh menyelesaikan masalah ini melalui komposisi, tetapi adakah terdapat cara untuk menyelesaikan masalah ini melalui definisi jenis, dan jika tidak, apakah sebabnya?

package main

type Addable interface {
    Add()
}

type Adder[T Addable] struct{}

func (a Adder[T]) DoAdd(){}

type PreciseAddable struct{}

func (p PreciseAddable)Add(){}

type PreciseAdder Adder[PreciseAddable]

func main() {
    var p PreciseAdder
    p.DoAdd()
}

Penyelesaian

ini:

type PreciseAdder Adder[PreciseAddable]

ialah pengisytiharan jenis, lebih khusus lagi takrif jenis. Ia mencipta jenis baharu, mengalih keluar semua kaedah.

Sebaliknya gunakan jenis alias yang akan mengekalkan semua kaedah, ia hanya memperkenalkan pengecam baharu untuk merujuk jenis yang sama:

type PreciseAdder = Adder[PreciseAddable]

(Perhatikan simbol = antara pengecam dan jenis.)

Atas ialah kandungan terperinci Takrifkan jenis sebagai instantiasi jenis generik. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam