我无法在 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