码迷,mamicode.com
首页 > 其他好文 > 详细

闭包浅谈

时间:2015-03-04 00:59:28      阅读:120      评论:0      收藏:0      [点我收藏+]

标签:

虽然可能在编码时会经常用到闭包,但对闭包的概念一直比较模糊。

 简单说下自己对闭包的理解

 

  • 闭包的实现方法 
    在我接触的脚本语言有 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表达式和匿名函数一样

闭包浅谈

标签:

原文地址:http://www.cnblogs.com/try0111/p/4309615.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!