《Lua》在使用过程中的问题

本文深入探讨Lua中的pairs与ipairs的区别,包括它们的工作原理、源码实现及存储结构层面的不同;解析点号与冒号在Lua中的作用及其背后的元表机制;并讨论require函数与package.loaded表在模块加载过程中的作用。

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

1.pairs和ipairs的区别
现在这么内卷不能再向网上上一样想的那么简单了。
一个能输出全部key-value值,一个碰到nil就停止输出。只回答到这个层面是不够的。
其他层面

  • 源码层面:ipairs返回未公开函数,输出接下来的下标和当前值,第一次调未公开函数,下标是0,之后内部会变成1,输出1,和对应的1的值。pairs就是调next函数,第一次传nil,接下来返回下一组key-value,https://www.kawabangga.com/posts/3063
  • 存储结构层面:table两种存储形式,一种数组,一种哈希表,所以我认为ipairs是有序的,pairs是跟着哈希表为无序的(在碰上下标不连续表格时候)

2.点号和冒号的区别
这是一道非常有意义的题目,表面看起来简单,实际上很难。

在这里插入图片描述

由这一题可以引出类继承元表之类的问题。
https://blog.youkuaiyun.com/ai5945fei/article/details/108135186

具体看这个博客,此博客解决了在这里插入图片描述
这个非常重要的问题。在这里插入图片描述
像这样第二行这样写就是错误的
相关__Index的作用。
在这里插入图片描述
https://blog.youkuaiyun.com/qq_15559109/article/details/109666375 看这篇博客

3.Lua中的require与package.loaded
https://blog.youkuaiyun.com/fightsyj/article/details/90314632
具体看这篇文章,大致意思是lua中的某个文件,模块,在require的时候每次都会从一个全局表中去查询,查到就使用这张表缓存的,没查到就到路径下去加载,加载后缓存,这样就是说每个模块只会加载一次,所以如果在每个模块的起始位置,使用获得另一个对象,由于每个模块,只加载一次,所以另一个对象就会是同一个,而实际开发可能是需要根据不同的角色加载不同的对象,从而导致bug。

4.全局函数在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JustEasyCode

谢谢您

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值