是否可以编写一个泛型类型约束,以便该类型包含一个返回相同类型的函数,或者它是否与普通接口存在相同的问题?示例用例是具有可链接方法的构建器。
假设我有一个构建器IntFoo,它有一个SetFoo方法负责将foo字段设置为某个值。游乐场链接
type IntFoo struct {
foo int
}
func (me *IntFoo) SetFoo(foo int) *IntFoo {
me.foo = foo
return me
}
现在我可能有几个像这样的不同类型的构建器,我想定义一个这样的约束:
type Builder[F any] interface {
SetFoo(F) Builder[F] // this return type is problematic
}
和一些使用 Builder 约束类型的函数,如下所示:
// some generic demo function
func demo[E Builder[F], F any](builder E, foo F) {
builder.SetFoo(foo)
return
}
尝试调用演示函数
e := &IntFoo{}
demo(e, 2)
导致错误:
[compiler InvalidTypeArg] [E] *IntFoo does not implement Builder[int] (wrong type for method SetFoo)
have SetFoo(foo int) *IntFoo
want SetFoo(int) Builder[int]
阿波罗的战车
相关分类