Die Typzusicherung kann nicht für den Typparameterwert verwendet werden

PHPz
Freigeben: 2024-02-09 21:42:09
nach vorne
670 Leute haben es durchsucht

Die Typzusicherung kann nicht für den Typparameterwert verwendet werden

In der PHP-Programmierung ist die Typzusicherung eine gängige Technik zur Bestimmung des Typs einer Variablen. Manchmal kann jedoch ein Problem auftreten: Typzusicherungen können nicht für Typparameterwerte verwendet werden. Diese Frage könnte einige Entwickler verwirren. In diesem Artikel werden wir die Ursachen dieses Problems untersuchen und einige Lösungen anbieten. Unabhängig davon, ob wir Anfänger oder erfahrene Entwickler sind, können wir Typzusicherungen besser verstehen und verwenden, indem wir dieses Problem verstehen und lösen. Lass uns einen Blick darauf werfen!

Frageninhalt

Wir können keine Typzusicherungen für generische Typvariablen verwenden. Dies scheint seltsam, wenn man bedenkt, dass es sich um das generische Verhalten der interface{} 允许的,但不受 interface{}-Einschränkung handelt. Sie fragen sich, ob es Workarounds gibt?

// This works
func isInt(x interface{}) bool {
    _, ok := x.(int)
    return ok;
}

// Compile Error
// invalid operation: cannot use type assertion on type parameter 
// value x (variable of type T constrained by interface{})
func isInt2[T interface{}](x T) bool {
    _, ok := x.(int)
    return ok;
}
Nach dem Login kopieren

Lösung

tl;dr

Sie können Typzusicherungen nur für Schnittstellenwerte durchführen. Daher müssen Sie zunächst x 转换为有效的接口类型,在本例中为 any / interface{} umrechnen:

func isint[t any](x t) (ok bool) {

    _, ok = any(x).(int) // convert, then assert
    return
}
Nach dem Login kopieren

Warum schlägt dieses Kompilieren fehl?

_, ok = x.(int)   // ... cannot use type assertion on type parameter value ...
Nach dem Login kopieren

x 的类型 t 是一个类型参数,而不是一个接口。它仅受接口约束。 go(修订版 1.18) Die Sprachspezifikation besagt eindeutig, dass Typparameter in Typzusicherungen nicht zulässig sind:

Für Schnittstellentyp, aber nicht für Typausdruck x Die Parameter und der Typ t ...符号 x.(t) werden Typzusicherungen genannt.

Außerdem erfahren Sie im Generics Tutorial, warum Parametertypen zur Kompilierungszeit aufgelöst werden müssen:

Obwohl Einschränkungen für Typparameter normalerweise eine Reihe von darstellen Typ, zur Kompilierungszeit stellt der Typparameter einen einzelnen Typ dar – Der vom aufrufenden Code als Typparameter bereitgestellte Typ. wenn Typ Der Typ des Parameters ist durch die Einschränkungen des Typparameters nicht zulässig. Der Code kann nicht kompiliert werden.

Das obige ist der detaillierte Inhalt vonDie Typzusicherung kann nicht für den Typparameterwert verwendet werden. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage