我正在学习Golang,为了好玩,我try 创建一个Map函数,该函数接受切片的My包装器(其中包含使用Go 1.22的GOEXPERIMENT=rangefunc的Iter函数).但是在Map函数中,编译器给我这个错误:"不能在f的参数中使用i(int类型的变量)作为T值".
type IterableSlice[T any] struct {
slice []T
}
func (is IterableSlice[T]) Iter(yield func(T) bool) {
for _, v := range is.slice {
yield(v)
}
}
func Map[T, V any](is IterableSlice[T], f func(T) V) IterableSlice[V] {
var a []V
for i := range is.slice {
f(i)
}
return IterableSlice[V]{a}
}
func main() {
a := []int{
1, 2, 3, 4, 5,
}
is := IterableSlice[int]{a}
var isf IterableSlice[float32]
isf = Map(is, func(x int) float32 {
return float32(x)
})
for i := range isf.Iter {
fmt.Println(i)
}
}
我正在努力解决这个错误,或者至少理解这是围棋中不可能做的事情