Lua里面new一个对象详细步骤

本文详细解析了Lua中使用元表(__index)和new方法创建对象时的方法调用顺序。通过实例说明了如何通过元表实现方法查找,并解释了self引用的概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 实现代码 结果

关键: 1.  __index 元方法 可以让classA在被其它表XX设置为元表时, XX被访问YY时如果XX里没有YY,但是XX有元表且元表有__index 就会继续访问元表里有没有YY
关键: 2. new方法最后返回的是新创建的o,所以test_a, test_b最终访问的才不是同一个getA getB 而o又把classA设置为了元表,访问顺序见关键1
关键: 3.  getA方法里的self指的是调用它的对象,而不是classA这个对象本身(当然classA也可以作为调用它的对象,比如里传入的self就是classA对象) ,classA:getA的写法只是说明getA是在classA里面定义的而已.

综合三点:
 的调用顺序: 
1.查看test_a里有没有getA方法  其中test_a里包含的成员为: a,b,元表 classA 
2.发现没有getA方法,继续确认getA有没有元表, 发现有元表 classA
3.查看 元表classA有没有 __index元方法,发现存在
4.继续访问classA里有没有getA()方法
5.发现存在getA()方法,就调用它   注意这里传入的self 是test_a对象 (关键3)
6.查看 test_a里有没有 成员a , 其中test_a里包含的成员为: a,b,元表 classA 
7.发现存在a,所以返回a

结论: 最终其实test_a test_b访问的都是自己定义的a和b,而不是classA里的 a和b.  (测试:把classA里的代码清空  结论:依然可以正确执行)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值