先看一下什么是柯里化:
在計(jì)算機(jī)科學(xué)中,柯里化(Currying)是把接受多個(gè)參數(shù)的函數(shù)變換成接受一個(gè)單一參數(shù)(最初函數(shù)的第一個(gè)參數(shù))的函數(shù),并且返回接受余下的參數(shù)且返回結(jié)果的新函數(shù)的技術(shù)。
-- 百度百科
柯里化是函數(shù)化編程的思想巷燥,簡單來說就是通過在函數(shù)中返回函數(shù),以此來減少每個(gè)函數(shù)的參數(shù)個(gè)數(shù)。
舉個(gè)栗子:
func add(value int) func (int) int {
return func (a int) int {
return value + a
}
}
fmt.Prinlnt(add(5)(10)) // 15
實(shí)際應(yīng)用:
在rxgo
中Just
函數(shù)使用柯里化(currying)讓它可以在第一個(gè)參數(shù)中接受多個(gè)數(shù)據(jù)渤愁,在第二個(gè)參數(shù)中接受多個(gè)選項(xiàng)定制行為。由于 Go 不支持多個(gè)可變參數(shù)深夯,Just通過柯里化迂回地實(shí)現(xiàn)了這個(gè)功能:
// rxgo/factory.go
func Just(items ...interface{}) func(opts ...Option) Observable {
return func(opts ...Option) Observable {
return &ObservableImpl{
iterable: newJustIterable(items...)(opts...),
}
}
}
參考:Go 每日一庫之rxgo