lua_next函数分析

lua_next函数分析,第1张

概述lua_next(L,index):先把 表(lua栈 index所指的表), 的当前索引d出,再把table 当前索引的值d出,也就是先d出 table的索引,再d出table索引的值 简单一个例子: <span style="font-family:KaiTi_GB2312;font-size:14px;">NUMBER_TABLE_WITH_INDEX ={["a"] = 1,["b"

lua_next(L,index):先把 表(lua栈 index所指的表),的当前索引d出,再把table 当前索引的值d出,也就是先d出 table的索引,再d出table索引的值

简单一个例子:

<span >NUMBER_table_WITH_INDEX ={["a"] = 1,["b"] = 2,["c"] = 3}</span>

<span > lua_getglobal(L,"STRING_table_WITH_INDEX");    /*此时lua栈状态    ----------------------------------    |  -1 table NUMBER_table    ----------------------------------    */</span>

 //循环遍历 lua_pushnil(L); /*此时lua栈状态 ---------------------------------- | -1 nil | -2 table NUMBER_table ---------------------------------- */    while(lua_next(L,-2)) { 此时lua栈状态 ---------------------------------- | -1 value | -2 key | -3 table NUMBER_table ---------------------------------- */        if(lua_isnumber(L,128); line-height:1.5!important">2)) cout<<"key:"<<lua_tonumber(L,128); line-height:1.5!important">2)<<'\t'; else if(lua_isstring(L,0); line-height:1.5!important">"<<lua_tostring(L,128); line-height:1.5!important">1)) cout<<value:1)<<endl; */ lua_pop(L,1); 此时lua栈状态 ---------------------------------- | -1 key | -2 table NUMBER_table ---------------------------------- */ } lua_pop(L,0); line-height:1.5!important">此时lua栈状态 ---------------------------------- | -1 table NUMBER_table ---------------------------------- */

lua_next函数的工作流程现在大概了解了。还是婆婆妈妈的上一段文字吧:

lua_next() 这个函数的工作过程是:
1) 先从栈顶d出一个 key
2) 从栈指定位置的 table 里取下一对 key-value,先将 key 入栈再将 value 入栈
3) 如果第 2 步成功则返回非 0 值,否则返回 0,并且不向栈中压入任何值

第 2 步中从 table 里取出所谓“下一对 key-value”是相对于第 1 步中d出的 key 的。table 里第一对 key-value 的前面没有数据,所以先用 lua_pushnil() 压入一个 nil 充当初始 key。

注意开始的时候先用 lua_gettop() 取了一下 table 在栈中的正索引(前面说过了,在进行这个 lua_next() 过程之前先将 table 入栈,所以栈大小就是 table 的正索引),后面的 lua_next() 过程中不断的有元素出入栈,所以使用正索引来定位 table 比较方便。

到了 table 中已经没有 key-value 对时,lua_next() 先d出最后一个 key,然后发现已经没有数据了会返回 0,while 循环结束。所以这个 lua_next() 过程结束以后 table 就又位于栈顶了。

总结

以上是内存溢出为你收集整理的lua_next函数分析全部内容,希望文章能够帮你解决lua_next函数分析所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1246398.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存