【发布时间】:2021-05-27 04:37:53
【问题描述】:
假设我正在实现这个函数来过滤 Golang 中的切片:
func Filter(filter func(n int) bool) func(list []int) []int {
return func(list []int) []int {
r := make([]int, 0)
for _, n := range list {
if filter(n) {
r = append(r, n)
}
}
return r
}
}
这样使用:
list := []int{1, 4, 3, 2, 7, 4, 9, 7}
r := Filter(func(n int) bool { return n > 3 })(list)
fmt.Println(r)
这工作正常,但我有以下问题:
- 我应该使用完整的 func 语法而不是 lambda 样式表达式吗?
- 如果我希望我的过滤器过滤任何类型的切片,我应该使用什么返回类型?
谢谢!
【问题讨论】:
-
Type parameters 来了。在此之前,请使用reflect 或遵循sort package 中的模式。
标签: go generics higher-order-functions