lua闭包

lua闭包,第1张

概述lua语言有如下两个特点:1.lua中的函数可以被存放在变量、表中,也可以作为函数的参数,还可以作为函数的返回值,如:      func = function()        print("Hello");      end  等价于      function func()        print("Hello");      end  这两种写法都是函

lua语言有如下两个特点:1.lua中的函数可以被存放在变量、表中,也可以作为函数的参数,还可以作为函数的返回值,如:      func = function()        print("Hello");      end  等价于      function func()        print("Hello");      end  这两种写法都是函数func()的定义;并且下面这个例子:      function func()        return function()  print("Hello");  end  --函数作为返回值      end      local f1 = func();      print(f1);            --运行结果:function:00379738      f1();              --运行结果:Hello  是函数作为函数返回值的情况,其中f1是func()内部返回的函数,打印出来为函数在内存中的地址,f1()调用了内部函数,执行后打印出了"Hello"结果。2.被嵌套的函数可以访问他外部函数中的变量(这个比较强悍,C语言只能访问全局的或以参数形式传入)。  看如下例子:    function func()      local index = 0;              local inner = function()        print(index);              index = index + 1;      end      inner();            --打印结果:0      inner();            --打印结果:1      print(index);           --打印结果:2    end    func();  说明了func()中的局部变量index是可以在inner()中被使用和更改的,index被称为inner()的upvalue。以上这两点是构成闭包的基础,也是lua语言的强大和灵活之处。另外,将上面例子稍加改造,如下:    function func()      local index = 0;      print("Hello");      return function()        print(index);        index = index + 1;      end    end    local inner = func();    --调用func()函数,返回内部函数给inner,打印结果:"Hello"    print(inner);        --打印结果:function:0037BE88    inner();          --调用内部函数,打印结果:0    inner();          --调用内部函数,打印结果:1    local other = func();    --获取另一个内部函数实例,打印结果:"Hello"    other();          --调用另一个内部函数实例,打印结果:0    other();          --同上,打印结果:1 由此可以看出函数的局部变量是可以保存在函数内部的,通过调用该函数内嵌的函数可以获取并修改局部变量的值,该函数的局部变量(upvalue)和内嵌函数的组合使用,形成了闭包,这看起来与C++中类的成员变量有些类似。函数具有闭包的功能后,不必再担心其局部变量没办法保存了,这一点对程序员的影响是很大的。还有如下例子:    function func();      local index = 0;      return function()        index = index + 1;        return index;      end    end    local inner = func();    print(inner());      --打印结果:1    print(inner());      --打印结果:2调用了func()的内部函数实例,并将函数调用结果打印了出来,是个很好的保存局部变量的方式。
总结

以上是内存溢出为你收集整理的lua闭包全部内容,希望文章能够帮你解决lua闭包所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1246538.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存