开发日记003-结构体、集合和高阶函数
golang支持高阶函数
- 什么是高阶函数
高阶函数英文叫Higher-order function。那么什么是高阶函数?
JavaScript的函数其实都指向某个变量。既然变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。
// Process all cars with the given function f:
func (cs Cars) Process(f func(car *Car)) {
for _, c := range cs {
f(c)
}
}
这里我们抽象了作用于所有车的这种行为,并接收一个作用于每一辆车的f函数作为参数
接下来我们可以具体定义f 假设我们的需求是根据需要从大集合里面获取子集合,这时我们可以传入一个闭包来获取car的局部切片cars
// Find all cars matching a given criteria.
func (cs Cars) FindAll(f func(car *Car) bool) Cars {
cars := make([]*Car, 0)
cs.Process(func(c *Car) {
if f(c) {
cars = append(cars, c)
}
})
return cars
}
//这时传入process的f就是这个闭包(不理解可以暂时可理解成内部匿名函数或者内部匿名类)
(func(c *Car) {
if f(c) {
cars = append(cars, c)
}
})

接下来就是定义if fc的f了
allNewBMWs := allCars.FindAll(func(car *Car) bool {
return (car.Manufacturer == “BMW”) && (car.BuildYear > 2010)
})
fmt.Println("AllCars: ", allCars)
fmt.Println("New BMWs: ", allNewBMWs)
输出结果
AllCars: [0xf8400038a0 0xf840003bd0 0xf840003ba0 0xf840003b70] New BMWs: [0xf840003bd0]

浙公网安备 33010602011771号