Heim  >  Artikel  >  Backend-Entwicklung  >  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
WBOYnach vorne
2024-02-05 23:48:11551Durchsuche

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
}

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
}

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!

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