Heim > Backend-Entwicklung > Golang > Einen Typparameter mit genauen Einschränkungen an eine Funktion mit diesem Parameter übergeben?

Einen Typparameter mit genauen Einschränkungen an eine Funktion mit diesem Parameter übergeben?

WBOY
Freigeben: 2024-02-05 23:48:11
nach vorne
623 Leute haben es durchsucht

Einen Typparameter mit genauen Einschränkungen an eine Funktion mit diesem Parameter übergeben?

Frageninhalt

Ich habe angefangen, Go-Generika zu verwenden, und es fällt mir schwer zu verstehen, warum dieser Code nicht kompiliert werden kann:

func f(string) {}

func xyz[T string](p T) {
    f(p) // Error! Cannot use 'p' (type T) as the type string
}
Nach dem Login kopieren

Warum können wir in der Funktion xyz nicht davon ausgehen, dass t eine Typbeschränkung hat, sodass t vom Typ String ist?

Ich weiß, ich könnte einfach schreiben f(string(p)), aber die Antwort auf die Frage interessiert mich trotzdem.


Richtige Antwort


Das liegt an den Regeln der Zuordenbarkeit, die in Ihrem speziellen Fall die letzte Regel sind.

v ist ein Typparameter, t ist kein benannter Typ und ein Wert jedes Typs im Typsatz von v kann t zugewiesen werden.

Typ string ist ein string 是一个命名类型,因此,尽管 t 类型集中的每个类型都可分配给 string,但类型参数 t 本身不可分配给 stringbenannter Typ

. Obwohl also jeder Typ im Typsatz t string zuweisbar ist, sind die Typparameter t selbst ist nicht auf string zuweisbar.

Sie können es mit unbenannten Typen

vergleichen. 🎜
func f([]string) {}

func xyz[T []string](p T) {
    f(p) // no issue
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonEinen Typparameter mit genauen Einschränkungen an eine Funktion mit diesem Parameter übergeben?. 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