Definieren einer rekursiven Typbeschränkung mithilfe einer vordefinierten Schnittstelle
In Go2-Generika können Schnittstellen verwendet werden, um Typeinschränkungen für generische Typen anzugeben. Der aktuelle Entwurf bietet jedoch keine Möglichkeit, die Implementierung einer Methode mit einem Argument des generischen Typs selbst zu erzwingen.
Um diese Einschränkung zu überwinden, ziehen Sie den folgenden Ansatz in Betracht:
Definieren Sie eine rekursive Schnittstelle:
type Lesser[T any] interface { Less(T) bool }
Definieren Sie eine Funktion mit einem generischen Typparameter, der durch die Rekursivität eingeschränkt wird Schnittstelle:
func IsLess[T Lesser[T]](x, y T) bool { return x.Less(y) }
Verwendung:
type Apple int func (a Apple) Less(other Apple) bool { return a < other } type Orange int func (o Orange) Less(other Orange) bool { return o < other } func main() { fmt.Println(IsLess(Apple(10), Apple(20))) // true fmt.Println(IsLess(Orange(30), Orange(15))) // false }
Erklärung:
Die Typbeschränkung T Lesser [T] stellt sicher, dass der generische Typ T die Less-Methode mit einem Argument vom Typ T implementieren muss. Dies ermöglicht einen rekursiven Typ Einschränkungen.
Mit diesem Ansatz können Sie benutzerdefinierte Typen wie Apple und Orange definieren, die ihre eigenen Less-Methoden implementieren, die rekursive Einschränkung erfüllen und die Verwendung der IsLess-Funktion mit diesen benutzerdefinierten Typen ermöglichen.
Das obige ist der detaillierte Inhalt vonWie kann ich rekursive Typbeschränkungen in Go2-Generika mithilfe von Schnittstellen definieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!