Heim  >  Artikel  >  Backend-Entwicklung  >  Definieren Sie einen Typ als generische Typinstanziierung

Definieren Sie einen Typ als generische Typinstanziierung

WBOY
WBOYnach vorne
2024-02-10 12:50:08575Durchsuche

Definieren Sie einen Typ als generische Typinstanziierung

Der PHP-Editor Xigua stellt Ihnen heute ein wichtiges Konzept vor – die Definition von Typen als Instanziierungen generischer Typen. In der Programmierung stellen Generika eine flexible Möglichkeit dar, allgemeinen Code zu schreiben, ohne einen bestimmten Typ anzugeben. Indem wir einen Typ als generische Typinstanziierung definieren, können wir bei seiner Verwendung den spezifischen Typ angeben, wodurch der Code flexibler und wiederverwendbar wird. Lassen Sie uns als Nächstes in dieses Konzept eintauchen und sehen, wie man Generics in PHP implementiert.

Frageninhalt

Im folgenden Beispiel versuche ich, einen PreciseAdder-Typ zu definieren, um die Verwendung instanziierter generischer Typen zu vereinfachen. Leider scheint der Go-Compiler zu glauben, dass für generische Typen definierte Methoden nicht auf PreciseAdder-Typen anwendbar sind. Ich weiß, dass ich dieses Problem durch Komposition lösen kann, aber gibt es eine Möglichkeit, dieses Problem durch Typdefinition zu lösen, und wenn nicht, was ist der Grund?

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

Lösung

dieses:

type PreciseAdder Adder[PreciseAddable]

ist eine Typdeklaration, genauer gesagt eine Typdefinition. Es erstellt einen neuen Typ und entfernt alle Methoden.

Verwenden Sie stattdessen Typaliase, wodurch alle Methoden erhalten bleiben. Es wird lediglich ein neuer Bezeichner eingeführt, um auf denselben Typ zu verweisen:

type PreciseAdder = Adder[PreciseAddable]

(Beachten Sie das =-Symbol zwischen Bezeichner und Typ.)

Das obige ist der detaillierte Inhalt vonDefinieren Sie einen Typ als generische Typinstanziierung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen