热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

lua的闭包(closure)研究

最近配置好了Ubuntu下的各种开发环境,在这里强烈推荐下SublimeText和Geany,个人比较喜欢subl,因为风格更加适合gee

最近配置好了Ubuntu下的各种开发环境,在这里强烈推荐下Sublime Text和Geany,个人比较喜欢subl,因为风格更加适合geeker :)

我们来看看这次的测试代码:

结果:

我们可以看出输出中返回十次的函数地址都有改变,也验证了在lua中函数是第一阶类型值。

我们稍微改下代码:


运行结果:

我们可以看到,循环十次输出的l在递增,因为l在这里变成了非局部的变量(non-local variable)(形参也可以作为非局部变量),t1 = test() 该句创建了一个新的闭包(closure),而对于一个独立的闭包而言,这些非局部的变量可用于在成功调用之间保持状态值,这为很多场合提供了方便,无需额外使用全局(或静态)变量来保存在函数调用时需要记录的值,只要相应地建立一个新的闭包,lua就会自动为你创建这些非局部变量 :) 这在写迭代器和和一些特殊场合的时候提供了很大的便利。

例如下面的例子,我们可以用闭包来实现计数器:

function newCounter(n)local i = n or 0return function()i = i + 1return iend
endc1 = newCounter()
c2 = newCounter()for i=1, 4 doc1()
endfor i=1, 10 doc2()
endprint("counter1:"..c1())
print("counter2:"..c2())

结果:


转:https://my.oschina.net/gal/blog/200168



推荐阅读
  • ue4怎么用虚幻商城场景_虚幻周报20200630 | 蒸蒸日上
    官方知乎号:虚幻引擎搜集日期:20200622-20200628整理编辑:大钊,小辉辉,马古斯, ... [详细]
  • 参考文档:https:www.tecmint.cominstall-chrony-in-centos-ubuntu-linuxhttps:www.redhat.com ... [详细]
  • python text函数_python可视化text()函数使用详解
    python可视化text()函数使用详解这篇文章主要介绍了python可视化text()函数使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 成功安装Sabayon Linux在thinkpad X60上的经验分享
    本文分享了作者在国庆期间在thinkpad X60上成功安装Sabayon Linux的经验。通过修改CHOST和执行emerge命令,作者顺利完成了安装过程。Sabayon Linux是一个基于Gentoo Linux的发行版,可以将电脑快速转变为一个功能强大的系统。除了作为一个live DVD使用外,Sabayon Linux还可以被安装在硬盘上,方便用户使用。 ... [详细]
  • 2016 linux发行版排行_灵越7590 安装 linux (manjarognome)
    RT之前做了一次灵越7590黑苹果炒作业的文章,希望能够分享给更多不想折腾的人。kawauso:教你如何给灵越7590黑苹果抄作业​zhuanlan.z ... [详细]
  • 初探PLC 的ST 语言转换成C++ 的方法
    自动控制软件绕不开ST(StructureText)语言。它是IEC61131-3标准中唯一的一个高级语言。目前,大多数PLC产品支持ST ... [详细]
  • JavaSE 学习参考:类的定义
    2019独角兽企业重金招聘Python工程师标准面向对象概念中的类是对具有特性和行为一类事物抽象描述,包含三个概念:类名,属性和方法 ... [详细]
  • MacSublimeText3配置汉化、主题、插件等功能,Go语言社区,Golang程序员人脉社 ... [详细]
  • Ubuntu下Sublime Text 2的安装
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 编辑器VSCode使用心得
    工欲善其事必先利其器,趁手的工具会使我们开发事半功倍。市面上的编辑器我用过许多,编辑器使用经历Notepad++,(开源)这个应该是最轻量级的吧,查看代码还好,编辑代码就算了官网地 ... [详细]
  • 关于sublime text3 package control无法使用问题的解决
    关于sublimetext3packagecontrol无法使用问题的解决,Go语言社区,Golang程序员人脉社 ... [详细]
author-avatar
elgin2010
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有