函式
1.函式與閉包
func adder() func (value int){
sum := 0
return func(value int) int{
sum += value
return sum
}
}
func main() {
adder := adder()
for i := 0; i < 10; i++ {
fmt.Println(adder(i))
}
}
函式式編程 VS 函式指標
- 函式是一等公民:引數,變數,回傳值都可以是函式
- 高階函式
- 函式 -> 閉包
2.“正統”函式式編程
- 不可變性:不能有狀態,只有常量和函式
- 函式只能有一個引數
type iAdder func(int) (int, iAdder)
func adder(base int) iAdder {
return func(value int) (int, iAdder){
return base+value, adder(base+value)
}
}
func main(){
a := adder(0)
for i := 0; i < 10; i++ {
fmt.Println(a(i))
}
}
3.其他語言的閉包
- python的閉包
def adder():
sum = 0
def f(value):
nonlocal sum
sum += value
return sum
return f
- python原生支持閉包
- 使用__closure__來查看閉包內容
- c++的閉包
auto adder() {
auto sum = 0;
return [=] (int value) mutable {
sum += value;
return sum;
};
}
- 過去:stl或者boost帶有類似庫
- c++11及以后:支持閉包
- java的閉包
Function<Integer, Integer> adder() {
final Holder<Integer> sum = new Holder<>(0);
return (Integer value )-> {
sum.value += value;
return sum.value;
};
}
- 1.8以后:使用Fuction介面和Lambda運算式來創建函式物件
- 匿名類或Lambda運算式均支持閉包
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/47196.html
標籤:Go
下一篇:GORM CRUD指南
