提问人:404 提问时间:7/3/2023 更新时间:7/3/2023 访问量:200
Golang 泛型 + 可变参数函数
Golang Generic+Variadic Function
问:
在 Golang 中具有一些通用类型的许多函数
type Transformer[A, B any] func(A)(B, error)
如何定义一个通用可调参数高阶函数,该函数通常可以组成这样的函数
func Compose[A,B,C....N any](transformers... Transformer[A,B], Transformer[B,C]...Transformer[M,N]) Transformer[A,N]
答:
2赞
NubDev
7/3/2023
#1
在 Go 中,尚不支持泛型可变参数函数。但是,您可以通过使用可变参数和递归来实现类似的结果。
评论
0赞
404
7/23/2023
是的,我最终得到了一步迭代编辑器type Composer[A,B, C any] func(ab Transformer[A, B], bc Transformer[B, C]) C
0赞
Spencer Connaughton
7/3/2023
#2
我同意@Volker;这在围棋中是一件愚蠢的事情。我建议你发布另一个问题,总结一下你实际上试图用这种结构解决的问题,看看是否有办法解决你的问题,这更习惯。
话虽如此,只是为了好玩:
package main
import (
"fmt"
)
type Composable[B, N any] func(in B) N
func Return[N any]() Composable[N, N] {
return func(in N) N {
return in
}
}
func ToString[N any](next Composable[string, N]) Composable[int, N] {
return func(in int) N {
return next(fmt.Sprintf("%v", in))
}
}
func Hello[N any](next Composable[string, N]) Composable[string, N] {
return func(in string) N {
return next(fmt.Sprintf("helloooo %s", in))
}
}
func main() {
f := ToString(Hello(Return[string]()))
res := f(22)
fmt.Printf("%v", res)
// Output: helloooo 22
}
需要明确的是,如果我在代码审查中看到这一点,我会非常担心。 😝
上一个:用于流式处理的 GRPC 元
评论