百度空间 | 百度首页 
               
 
查看文章
 
使用lua_next()遍历表
2007-07-25 20:58

问题概要: 用lua写了个函数,返回的是一个表.需要在C里对返回的表里元素做二次处理.

在C里我们可以通过lua_gettable()或者lua_rawget()来获取表里元素值,但使用这两个接口的前提是你得知道key,它才能给你value. 当然对于顺序下标倒无所谓,但恰巧这次我用到的是关联数组,下标是无规则字符串.这时候如何遍历出表里元素就是个问题.

lua_next()就成了比较合适的选择.画了下图对整个逻辑做了解释

上图对简单的表遍历做了介绍, 但事实上的情况是我返回了一个二维表,如果你了解了lua_next()的处理过程,那下面的代码看起来就没什么问题了.

       t_idx = lua_gettop(L);

       lua_pushnil(L);

       

       while (lua_next(L, t_idx))

       {

              printf("============================\n");

              it_idx = lua_gettop(L);

              lua_pushnil(L);

              while(lua_next(L, it_idx))

              {

                     printf("%s\n", lua_tostring(L, -1));

                     lua_pop(L, 1);

              }

              lua_pop(L, 1);

       }

本文仅起个抛砖引玉的作用, 实际上lua的栈逻辑基本就是这样.其他接口的调用方式也很类似.

1.参数压栈

2.call 函数

3.返回值位于栈顶

4.pop返回值


类别:Lua | 添加到搜藏 | 浏览() | 评论 (3)
 
网友评论:
1
2007-07-27 17:04 | 回复
沙发
 
3
2007-07-29 16:12 | 回复
问个技术性的问题,为什么总有沙发给我坐?
 
4
2007-07-29 16:44 | 回复
因为没人来坐了.哈哈哈.我这里的沙发升不了值.
 
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码: 请点击后输入四位验证码,字母不区分大小写
      

     

©2009 Baidu