lua闭包的理解以及表与函数的几种表达方法
前一段时间,在学习lua语言时,看lua中文教程,在读闭包这一节时,看了好几遍,对闭包这个概念还是很模糊,不能清楚的理解它是怎么回事
最近工作不是很忙,所以就自学了一些lua的知识,但是才看了两个多小时就遇见了一个问题——闭包。好吧,我是看见它第一眼的时候以为是和close之类有关的巴拉巴拉。。。。(原谅我的无知)!但是越往下看越迷茫,所以就网上看了好多大师写的东西学习学习,特此记录一下,以便日后看到不会。。。。。被人鄙视
在lua中函数也是变量,可以存储在表中,也可以是函数的参数,或是返回值,其实是个lua的闭包大概可以理解成这个样子闭包(函数名){功能抽象,upvalue,env},功能抽象就是函数体了,
upvalue:是内嵌函数可以访问外包函数已经创建的所有局部变量,这些局部变量称为该内嵌函数的外部局部变量(externallocalvariable)或者upvalue,upvalue实际指的是变量而不是值。
functionnewCounter() locali=0 returnfunction() i=i+1 returni end end
在上面的例子中i就是一个upvalue
简单的说闭包是一个函数加上它可以正确访问的upvalue。upvalue是嵌套函数的外部函数的局部变量。这个函数一般定义在另一个函数内部;他可以访问定义在外部函数内的成员变量,参数,以及全局函数。并且这个函数还可以返回函数。
表和函数
一:
Lib={} Lib.foo=function(x,y)retrunx+yend Lib.goo=function(x)retrunxend;
二:
Lib={ foo=function(x,y)retrunx+yend goo=function(x)retrunxend; }
三:
Lib={} Lib={} functioLib.foo(x,y)retrunx+yend functionLib.goo(x)retrunxend;
以上就是对lua的闭包和表与函数的理解,有需要的小伙伴可以参考下。