将 Map 方法添加到通用切片中 [重复]

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

我无法在 go 中为流式编程(方法链接)创建通用切片的 Map 方法。

例如查看我为 Filter 方法创建的代码片段:

package main

import "fmt"

type Stream[T any] []T

type Consumer[T any] func(T)

type Predicate[T any] func(T) bool

func NewStream[T any](slice []T) Stream[T] {
    return Stream[T](slice)
}

func (s Stream[T]) ForEach(cons Consumer[T]) {
    for _, val := range s {
        cons(val)
    }
}

func (s Stream[T]) Filter(pred Predicate[T]) Stream[T] {
    res := []T{}

    s.ForEach(func(i T) {
        if pred(i) {
            res = append(res, i)
        }
    })

    return NewStream(res)
}

func main() {
    NewStream([]int{1, 4, 2, 6, 9}).
        Filter(func(i int) bool { return i%2 == 0 }).
        ForEach(func(i int) { fmt.Println(i) })
}

但是好像我们不能像这样给

Stream[T]
添加一个Map方法:

func (s Stream[T]) Map[S any](f func(T) S) []S {
    // The implementation does not matter.
    return nil
}

这是错误:

$ go run main.go
# command-line-arguments
./main.go:39:23: syntax error: method must have no type parameters
go generics method-chaining
© www.soinside.com 2019 - 2024. All rights reserved.