关于Lua的面向对象和闭包的理解

本文探讨了Lua的面向对象实现机制,通过语法糖实现类和对象,详细解释了构造函数如何创建实例并设置元表。此外,还阐述了Lua中的闭包概念,强调函数作为第一类值的特性,以及如何通过词法作用域和保存局部变量形成闭包,每次调用外层函数都会生成具有独立外部变量的新的闭包。
摘要由CSDN通过智能技术生成

Lua的面向对象实现是通过各种语法糖来实现的,function t:a(…)会被转换为t.a=function(self,…),而t:a(…)会被翻译为t.a(t,…)。同时t.a又会被翻译成t[“a”],所以绕来绕去底层实现还是table


Lua的类的构造函数形式一般为class:new(…),当调用时就class就会传入形参self,因此需要新建一个table并且把它的元表设置为self(也就是class),并且为这个元表添加__index属性(值设置为它本身),这样返回的table(实例)在找不到元素的情况下就会去找metatable__index(类)。同样的原理可以实现父类和子类之间的关系;


③关于闭包,lua的函数作为第一类值,跟传统类型的变量没有区别,甚至还有特定的词法域,即一个函数可以嵌套在另一个函数中,内部的函数可以访问到外部函数中的变量。看起来外层函数已经退出,它的局部变量应该会被销毁,但Lua会把它加以保存起来并和内层函数绑定起来,称之为闭包。每调用一次外层函数就会生成一个新的闭包,不同闭包的外部局部变量是相互独立的;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值