Golang泛型+变元函数

5lhxktic  于 2023-08-01  发布在  Go
关注(0)|答案(2)|浏览(123)

在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]

rekjcdws

rekjcdws1#

在Go语言中,还不支持泛型变量函数。但是,您可以通过使用可变参数和递归来实现类似的结果。

arknldoa

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
}

字符串
需要明确的是,如果我在代码审查中看到这一点,我会非常担心。😝

相关问题