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.全局函数