Der PHP-Editor Baicao führt Sie in die gemeinsame Verwendung von Generika und benutzerdefinierten Typen ein. Generics sind eine in der Programmierung häufig verwendete Technik, um Code flexibler und wiederverwendbar zu machen. Benutzerdefinierte Typen sind Datentypen, die von Entwicklern selbst basierend auf Geschäftsanforderungen definiert werden. Wenn wir in einem benutzerdefinierten Typ Generika verwenden müssen, können wir dies über generische Klassen oder generische Schnittstellen tun. Durch den rationalen Einsatz von Generika und benutzerdefinierten Typen können wir die Wartbarkeit und Skalierbarkeit des Codes besser verbessern. In den folgenden Artikeln werden wir die spezifischen Methoden und Überlegungen zur Verwendung von Generika mit benutzerdefinierten Typen detailliert beschreiben.
Ich bin wirklich verwirrt darüber, wie die Regeln für Generika funktionieren. Ich möchte lediglich, dass eine Funktion mehrere benutzerdefinierte Typen akzeptiert und für jeden Typ eine andere Logik hat.
type myObjOne struct { myfield string } type myObjTwo struct { myObjTwo myOtherField string } type Generic interface { myObjOne | myObjTwo } func derp[T Generic](c T) { switch any(c).(type) { case myObjOne: // I can't access the fields of my types like this c.myfield = "sdfsfsdfdsf" case myObjTwo: c.myOtherField = "sdfsfsdfdsf" } return }
Warum löst c.myfield
den CompilerMissingFieldOrMethod aus? c.myfield
抛出 c.myfield 未定义(类型 T 没有字段或方法 myfield)compilerMissingFieldOrMethod
?
c
是类型 T
c
。 c
c
ist vom Typ T
und nicht das Ergebnis einer Typzusicherung. Behoben durch Zuweisen des Ergebnisses der Typzusicherung zu einer Variablen.
func derp[T Generic](c T) { switch c := any(c).(type) { case myObjOne: // I can't access the fields of my types like this c.myfield = "sdfsfsdfdsf" case myObjTwo: c.myOtherField = "sdfsfsdfdsf" } return }
Das obige ist der detaillierte Inhalt vonWie verwende ich Generika mit benutzerdefinierten Typen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!