虽然可能在编码时会经常用到闭包,但对闭包的概念一直比较模糊。
简单说下自己对闭包的理解
- 闭包的实现方法
在我接触的脚本语言有 lua、js、python,感觉语法都差不多,主要特点就是 :
无需编译、若类型、数据结构强大、灵活多变这里随口说下脚本在开发中的优点:
无需编译,在软件更新时作用很大,由于appstore的审核比较严,如果运行中的游戏应用出现问题时需要更新时,这时候如果等appstore审核那估计要俩星期之后了
游戏现在大部分的做法就是 游戏上层业务逻辑都用lua写,底层很少变动要求效率高的用C++写,这样在更新版本, 修复bug时就可以让用户在启动时下载需要的脚本直接更新
从而避开appstore审核所浪费的时间若类型,在声明定义一个变量时,不用去声明类型,你只需写个 local 或 var 或什么都不写,类型根据后面赋值确定,当然现在的C++11也支持了这种声明,在参数传递时,不需要指定的类型接收,在C++中类似解决方法就是void*
数据结构强大,lua 和 js 的table非常强大好用,不仅可以在其中放任意类型数据,当成数组用,还能设置k值当成map用,python的列表字典和元组也是同样好用的
灵活多变,在使用脚本语言时,就能感觉用起来比较轻量级,不像在用C++时,写什么都要先声明,定义,头文件,繁琐。在使用脚本时,你可以在随便一个复杂类型数据后面 . 出个变量而无需声明,当然这样也带来些问题 有时候都不知道一个变量最先在哪出现的
上面说了,table里可以放置任何类型数据,而在脚本里,函数也是一种很普通的数据类型 function,在一个table里也可声明函数,如
tt = {
a = 10 ,
b = 10,
c = function()
print(a..b)
end
}闭包函数 我的理解就是 将函数作为返回值赋给另一个变量,这个变量就可以引用函数去执行,函数在执行过程中需要的变量都不会施放,只要还有引用在,即使是局部变量也不会施放。
达到的效果就是 外部变量可以通过闭包函数访问局部变量 但其实我在工作中用到的并不多 - 闭包的实际用途
实际工作中,我经常用到的,应该也就是匿名函数了 在一个按钮上注册一个事件处理函数时 而这个函数要做的事情很简单,那就直接写上匿名函数 - 各种语言的闭包特点
- lambda表达式和闭包
C++11中的lambda表达式和匿名函数一样