设为首页
收藏本站
开启辅助访问
切换到窄版
充值
登录
立即注册
只需一步,快速开始
懒人官网
论坛首页
BBS
视频直播网校
VIP会员
钱包
合鑫云真机
任务大厅
搜索
搜索
本版
帖子
用户
懒人精灵论坛
»
论坛首页
›
懒人精灵
›
教程专区
›
Lua语法小贴士(十六)pairs和next
返回列表
发新帖
Lua语法小贴士(十六)pairs和next
[复制链接]
2215
|
1
|
2022-5-15 12:05:18
|
显示全部楼层
|
阅读模式
今天看到一个帖子,是关于lua优化的,上面说清空一个表的时候,pairs的效率是next的500倍。
我记得for pairs循环实际上就是调用的就是next,还特意查了源码,应证了我的记忆。
源码就不贴了,直接给结论。
for k, v in pairs(tbl) do
end
基本等同于
for k, v in next, tbl, nil do
end
pairs(tbl)返回三个值,称为迭代方法(源码注释中为generator)、状态和初始值。
而实际上这个三个值便是next,tbl和nil。
第一次循环,将tbl和nil传入next方法,返回k和v(如果是空表,返回nil,中断循环)。
第二次循环,将tbl和k传入next方法,返回新的k和v(如果是空表,返回nil,中断循环)。
……
ipairs与之类似,只不过ipairs返回的迭代方法是一个没有暴露出来的方法,而初始值是0。
第一次循环,将tbl和i(初始值0)传入迭代方法,i++,然后用rawgeti获取第一个值v,返回i和v(如果是空表,直接返回,中断循环)。
第二次循环,将tbl和i(当前值1)传入迭代方法,i++,然后用rawgeti获取第二个值v,返回i和v(如果是空表,直接返回,中断循环)。
……
因为帖子没有给出代码,我也不敢武断的就说对方是错的。但是我认为,没有上下文的情况下,对方直接给出pairs比next快很多的结论也是有很大问题的。
回复
使用道具
举报
pisces217
|
2022-5-15 17:54:36
|
显示全部楼层
涨知识了
回复
使用道具
举报
返回列表
发新帖
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
本版积分规则
发表回复
回帖后跳转到最后一页
admin
108
主题
131
帖子
1万
积分
管理员
积分
15616
加好友
发消息
回复楼主
返回列表
版本更新
问答专区
综合讨论
直播公开课专区
教程专区
VSCODE专区
插件专区
源码分享
懒人BUG&建议专区
论坛事务
广告位招商