在Golang语言中,有一些泛型函数
type Transformer[A, B any] func(A)(B, error)
字符串如何定义一个通用的Variadic高阶函数,它可以组成这样的函数
func Compose[A,B,C....N any](transformers... Transformer[A,B], Transformer[B,C]...Transformer[M,N]) Transformer[A,N]
型
rekjcdws1#
在Go语言中,还不支持泛型变量函数。但是,您可以通过使用可变参数和递归来实现类似的结果。
arknldoa2#
我同意@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 }
字符串需要明确的是,如果我在代码审查中看到这一点,我会非常担心。😝
2条答案
按热度按时间rekjcdws1#
在Go语言中,还不支持泛型变量函数。但是,您可以通过使用可变参数和递归来实现类似的结果。
arknldoa2#
我同意@Volker;这在围棋中是一件很愚蠢的事情。我建议你再发一个问题,总结一下你实际上试图用这个结构解决的问题,看看是否有一种更习惯的方法来解决你的问题。
所有这些都是为了好玩:
字符串
需要明确的是,如果我在代码审查中看到这一点,我会非常担心。😝