获取切片的基础类型作为类型参数传递给方法接收器中的类型参数

问题描述 投票:0回答:1

我正在使用 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]

有什么方法可以解决这个问题?

go generics functional-programming
1个回答
0
投票

如果你想在切片上有一个方法来减少它,请将

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 上的示例。

© www.soinside.com 2019 - 2024. All rights reserved.