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.
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
本身不可分配给 string
benannter Typ
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!