Learning Functional Programming in Go
上QQ阅读APP看书,第一时间看更新

The Map function

Back to main.go. This time, you'll be introduced to the Map HOF. Whereas Filter acts to reduce the number of items in the resulting collection, Map will return the same number of items that it receives. The Map function transforms the collection into a new collection, where each item is changed in some way:

PrintCars("Numeric, Foreign, Map Upgraded",
cars.Filter(ByHasNumber()).
Filter(ByForeign()).
Map(Upgrade()))

Here's the output of this:

Numeric, Foreign, Map Upgraded
-----------------------
car: Honda Accord ES2 LX
car: Lexus IS250 LS
car: Lexus SC 430 LS
car: Toyota 86 EV
car: Toyota RAV4 EV

We pass a MapFunc function named Upgrade to Map:

func Upgrade() MapFunc {
return func(car string) string {
return fmt.Sprintf("%s %s", car, UpgradeLabel(car))
}
}

Upgrade calls the UpgradeLabel function in order to append the appropriate upgrade label to the end of the cars' model name:

func UpgradeLabel(car string) string {
return map[string]string{
"Honda": "LX",
"Lexus": "LS",
"Toyota": "EV",
"Ford": "XL",
"GM": "X",
}[GetMake(car)]
}