Maison >développement back-end >Golang >Définir un type comme instanciation de type générique

Définir un type comme instanciation de type générique

WBOY
WBOYavant
2024-02-10 12:50:08658parcourir

Définir un type comme instanciation de type générique

L'éditeur PHP Xigua vous présentera aujourd'hui un concept important : définir les types comme des instanciations de types génériques. En programmation, les génériques constituent un moyen flexible d’écrire du code général sans spécifier de type spécifique. En définissant un type comme instanciation de type générique, nous pouvons spécifier le type spécifique lors de son utilisation, rendant le code plus flexible et réutilisable. Ensuite, plongeons dans ce concept et voyons comment implémenter des génériques en PHP.

Contenu de la question

Dans l'exemple ci-dessous, j'essaie de définir un type PreciseAdder pour simplifier l'utilisation de types génériques instanciés. Malheureusement, le compilateur go semble penser que les méthodes définies sur les types génériques ne sont pas applicables aux types PreciseAdder. Je sais que je peux résoudre ce problème grâce à la composition, mais existe-t-il un moyen de résoudre ce problème via la définition de type, et sinon, quelle en est la raison ?

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()
}

Solution

ceci :

type PreciseAdder Adder[PreciseAddable]

est une déclaration de type, plus précisément une définition de type. Cela crée un nouveau type, supprimant toutes les méthodes.

Utilisez plutôt type aliases qui conservera toutes les méthodes, cela introduit simplement un nouvel identifiant pour référencer le même type :

type PreciseAdder = Adder[PreciseAddable]

(Notez le symbole = entre l'identifiant et le type.)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer