Hier sind einige fragenbasierte Titel, die zum Inhalt des Artikels passen: * So verwenden Sie eingeschränkte Typen als Funktionsargumente in Go 1.18 Generics: Dies ist ein direkter und informativer Titel, der das hervorhebt

Susan Sarandon
Freigeben: 2024-10-28 09:57:29
Original
236 Leute haben es durchsucht

Here are a few question-based titles that fit the article's content:

* How to Use Constrained Types as Function Arguments in Go 1.18 Generics:  This is a direct and informative title highlighting the core issue and solution.
* Go 1.18 Generics:  Why Can

Eingeschränkte Typen als Funktionsargumente in Go 1.18-Generika

Die Generika von Go 1.18 bieten leistungsstarke Typeinschränkungen, mit denen Entwickler benutzerdefinierte Typen definieren können spezifisches Verhalten. Die Verwendung dieser eingeschränkten Typen als Argumente für Funktionen, die konkrete Typen erwarten, kann jedoch zu Kompilierungsfehlern führen.

Problem:

Betrachten Sie das gegebene Beispiel, in dem die Charmander-Struktur definiert ist als generischer Typ mit einem Typparameter F. Beim Versuch, die Angriffskraft des Charmander zu nutzen, um mithilfe der InflictDamage-Methode Schaden anzurichten, gibt der Compiler einen Fehler aus.

Fehlermeldung:

cannot use c.AttackPower (variable of type float64 constrained by Float) as float64 value in argument to other.ReceiveDamage compiler(IncompatibleAssign)
Nach dem Login kopieren

Dieser Fehler tritt auf, weil die InflictDamage-Methode ein float64-Argument erwartet, die AttackPower-Variable jedoch vom eingeschränkten Typ F ist.

Lösung:

Um diesen Fehler zu beheben, ist die Verwendung von Typkonvertierungen erforderlich. Der eingeschränkte Typ F kann in float64 konvertiert werden, indem sein Wert explizit umgewandelt wird, wie im überarbeiteten Code gezeigt:

func (c *Charmander[T]) ReceiveDamage(damage float64) {
    c.Health -= T(damage)
}

func (c *Charmander[T]) InflictDamage(other Pokemon) {
    other.ReceiveDamage(float64(c.AttackPower))
}
Nach dem Login kopieren

Diese Konvertierungen sind gültig, da float64 sowohl mit float32 als auch mit float64 kompatibel ist, den von der zulässigen Typen Typparameter F. Es ist wichtig zu beachten, dass die explizite Umwandlung von F in float64 zu einem Präzisionsverlust führen kann, wenn F mit float32 instanziiert wird.

Das obige ist der detaillierte Inhalt vonHier sind einige fragenbasierte Titel, die zum Inhalt des Artikels passen: * So verwenden Sie eingeschränkte Typen als Funktionsargumente in Go 1.18 Generics: Dies ist ein direkter und informativer Titel, der das hervorhebt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
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 Artikel des Autors
Beliebte Tutorials
Mehr>
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!