
上QQ阅读APP看书,第一时间看更新
More high-order functions
Now, let's return to main.go to look at a few more HOFs in action.
We apply our ByMake filter and a new type of reducer. This reducer, Reducer2, will return a slice of CarTypes rather than JSON:
PrintCars2("Reduce - Lexus",
cars.Filter(ByMake("Lexus")).
Reduce2(CarTypeReducer(cars), []CarType{}))
Here's the output of this:
Reduce - Lexus
-----------------------
car: {Lexus IS250}
car: {Lexus SC 430}
The following is another example that shows how easy chaining, also known as function composition, is:
PrintCars("ByModel - Accord up/downgraded",
cars.Filter(ByModel("Accord")).
Map(Upgrade()).
Map(Downgrade()))
Here's the output of this:
ByModel - Accord up/downgraded
-----------------------
car: Honda Accord
car: Honda Accord ES2
We saw how the Upgrade map function adds the appropriate label to the end of the car model. By applying Downgrade after Upgrade, we effectively undo Upgrade.