7.1 函数式编程
一、函数式编程与函数指针
函数式编程是一等公民:参数,变量,返回值都可以是函数
高阶函数
函数 → 闭包
二、"正统"函数式编程
不可变性:不能有状态,只有常量和函数
函数只能有一个参数
func adder() func(int) int {
sum := 0
return func(i int) int {
sum += i
return sum
}
}
func main() {
a := adder() // 调用函数
for i := 0; i < 10; i++ {
fmt.Println(a(i))
}
}累加器函数举例
函数名:
adder()参数:无
返回值:
func(int) int这个函数
三、闭包的概念
函数体中:有局部变量与自由变量
备注:上面的例子中,
adder()函数中的i就是局部变量,sum是自由变量自由变量可能具有链接关系
所以,上面的例子中,return返回的内容是一个闭包
四、其他语言中的闭包(累加器)
python
python原生支持闭包
使用
__closure__来查看闭包内容
C++
过去:stl或者boost带有类似库
c++11及以后:支持闭包
java
1.8以:使用Function接口和Lambda表达式来创建函数对象
匿名类或Lambda表达式均支持闭包
Last updated
Was this helpful?