我正在使用 Go 泛型创建一个数据结构。
用例是编写一个Reduce函数,该函数接受定义类型的切片,将reduce函数应用于切片的每个元素并返回定义类型的值。
type MyType[T any] struct{
I int
}
// I want to write something like this
func (m MyType[[]T]) Reduce(init T, fnReduce func(acc T, elem T) (result T) {
for _, v := range m {
acc = fnReduce(acc, v)
}
return acc
}
Go 编译器不允许将类型参数提供给接收者,如下所示:
m MyType[[]T]
有什么方法可以解决这个问题?
如果你想在切片上有一个方法来减少它,请将
MyStruct
定义为 T
的切片:
type MyType[T any] []T
func (m MyType[T]) Reduce(init T, fnReduce func(acc T, elem T) (result T)) T {
res := init
for _, v := range m {
res = fnReduce(res, v)
}
return res
}
这是 Playground 上的示例。