Definieren Sie einen Typ als generische Typinstanziierung

WBOY
Freigeben: 2024-02-10 12:50:08
nach vorne
551 Leute haben es durchsucht

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() }
Nach dem Login kopieren

Lösung

dieses:

type PreciseAdder Adder[PreciseAddable]
Nach dem Login kopieren

ist eineTypdeklaration, genauer gesagt eineTypdefinition. Es erstellt einen neuen Typ und entfernt alle Methoden.

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

type PreciseAdder = Adder[PreciseAddable]
Nach dem Login kopieren

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

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!