• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >Lua > LUA中的闭包(closure)浅析

LUA中的闭包(closure)浅析

作者:junjie 字体:[增加 减小] 来源:互联网

junjie 通过本文主要向大家介绍了closure,closure是什么意思,closure type,need for closure,snap closure等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

之前对closure一知半解,在网上也找不到一篇文章能把它说清楚,今天好像第一次对它有点清晰的了解 了,写个BLOG记念一下

lua的函数是一种 First-Class Value 的东西, 到底是啥?
就是它们与传统类型的变值没啥区别,
可以 存到一个变量中,
可以 存到table中,
可以 作为实参传递给其它函数,
可以 作为其它函数的返回值.

它们还具有特定的词法域(Lexical Scoping), 也就是说, 一个函数可以嵌套在另一个函数中, 内部的函数可以访问外部函数中的变量.
如下面的例子:
function test(x)
    return function (value)
        return value * x
    end
end

func = test(10)

print( func(11) )
</div>
在test()中,嵌套了一个匿名函数作为返回值, 而在这个匿名函数中 可以访问外部的 value 变量
再看另一个例子
function newCounter()
        local i = 0
        func = function()
                i = i + 1
                return i
        end

        return func
end

c = newCounter()
print(c())
print(c())

c1 = newCounter()
print(c1())
print(c1())
</div>
代码中, 函数 func 里访问了一个 "非局部的变量" i, 用于保存一个计数器
初步看,由于创建变量i的函数 newCounter 已经返回, 所以每次调用 func 时, 应该是超过了作用范围

其实不然, lua 会以 closure 的概念来处理这种情况.
一个 closure 就是一个函数加上该函数所需访问的所有"非局部的变量"

所以上例中 c1, c2 是同个函数所创建的两个不同的 closure, 它们各自拥有局部变量i的独立实例.

从技术上来讲, lua中只有 closure, 而不存在"函数". 因为"函数"本身就是一种特殊的 closure.

后记,C++的类对象不也可以达到类似的效果?

</div>

您可能想查找下面的文章:

  • Lua学习笔记之函数、变长参数、closure(闭包)、select等
  • Lua select函数用法实例
  • LUA中的闭包(closure)浅析

相关文章

  • 浅谈Lua的面向对象特性
  • 解析Lua中的全局环境、包、模块组织结构
  • Lua中获取table长度问题探讨
  • lua中使用毫秒精度时间的方法
  • Lua中的模块(module)和包(package)详解
  • Lua教程(二十):Lua调用C函数
  • Lua中的迭代器和泛型for实例
  • Lua简介、编译安装教程及变量等语法介绍
  • Lua教程(二):基础知识、类型与值介绍
  • Lua教程(六):编译执行与错误

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • Lua中的元表与元方法学习总结
    • Lua编程示例(七):协同程序基础逻辑
    • Lua中的变量类型与语句学习总结
    • Lua和C++语言的交互详解
    • Lua中关于元方法的一些知识点小结
    • 使用lua实现php的var_dump()函数功能
    • lua中使用毫秒精度时间的方法
    • 安装Nginx+Lua开发环境
    • Lua中实现StringBuffer功能
    • 实现Lua中数据类型的源码分享

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有