Maison > développement back-end > Golang > le corps du texte

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

WBOY
Libérer: 2024-02-10 12:50:08
avant
575 Les gens l'ont consulté

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()
}
Copier après la connexion

Solution

ceci :

type PreciseAdder Adder[PreciseAddable]
Copier après la connexion

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]
Copier après la connexion

(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!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!