使用预定义接口定义递归类型约束
在 Go2 泛型中,接口可用于指定泛型类型的类型约束。但是,当前草案没有提供强制实现带有泛型类型本身参数的方法的方法。
要克服此限制,请考虑以下方法:
定义递归接口:
type Lesser[T any] interface { Less(T) bool }
定义具有泛型类型参数的函数受递归接口约束:
func IsLess[T Lesser[T]](x, y T) bool { return x.Less(y) }
用法:
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 }
解释:
类型约束 T Lesser[T] 确保泛型类型 T 必须实现 Less 方法T 类型的参数。这允许递归类型约束。
这种方法使您能够定义自定义类型,例如 Apple 和 Orange,它们实现自己的 Less 方法,满足递归约束并启用 IsLess 函数使用这些自定义类型。
以上是如何使用接口在 Go2 泛型中定义递归类型约束?的详细内容。更多信息请关注PHP中文网其他相关文章!