函数
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.cnblogs.com/tulipgirl/p/12258910.html