package main
import "fmt"
func chunker[T any]() func([]T, int) [][]T {
return func(ar []T, size int) [][]T {
var finalAr [][]T
for i := 0; i < len(ar); i += size {
end := i + size
if end > len(ar) {
end = len(ar)
}
finalAr = append(finalAr, ar[i:end])
}
return finalAr
}
}
func main() {
xI := []int{1, 2, 3, 0, 0, 5, 6, 4, 7, 8, 9, 10}
fmt.Println(chunker()(xI, 3))
}
This throws
./prog.go:20:21: cannot infer T (prog.go:5:14)
Its equivalent without closure return works fine
package main
import "fmt"
func chunker[T any](ar []T, size int) [][]T {
var finalAr [][]T
for i := 0; i < len(ar); i += size {
end := i + size
if end > len(ar) {
end = len(ar)
}
finalAr = append(finalAr, ar[i:end])
}
return finalAr
}
func main() {
xI := []int{1, 2, 3, 0, 0, 5, 6, 4, 7, 8, 9, 10}
xS := []string{"a", "b", "c", "c", "d", "e", "f", "g", "h"}
fmt.Println(chunker(xI, 3))
fmt.Println(chunker(xS, 4))
}
Gives this
[[1 2 3] [0 0 5] [6 4 7] [8 9 10]]
[[a b c c] [d e f g] [h]]
Which is expected
How can I make the closure one work