lua元表实现原理读后感

介绍了lua虚拟机从表中查询数据的过程,若查询对象是表,按key查,结果为空时根据有无__index处理;若不是表,获取metatale的__index继续查,有层数限制。还提到可用lua表实现面向对象,有两种方法,各有开销特点。

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

lua虚拟机从一个表中查询数据的过程:

  • 如果查询对象是表,则尝试根据key在表中查询数据,若有则返回结果;若结果为空,且无__index成员,则返回空结果;若结果为空且有__index,则设查询对象为__index,进行下一层深度的查找;
  • 若查询对象不是表,则尝试获取对象的metatale["__index"](usedata可能有此成员),设为查询对象并进行下一层深度的查找;
  • 逐层深度向下查找,但有层数限制,超过则终止查找。

由这条特性,我们可以用lua表来实现面向对象,最简单的是将__index指向基类,另一种方法是在实例化对象时直接将基类的成员深拷贝给子类。两种不同方法的差别显而易见:前者不宜多层继承,否则查找成员时一层层找增加额外开销;后者提高了查找效率,但在实例化时会有额外的开销。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值