lua_gettable和lua_rawget用法


lua_gettable

void lua_gettable (lua_State *L, int index);

把t[k]值压入堆栈, 这里的t是指有效索引index指向的值,而k则是栈顶放的值。

这个函数会弹出堆栈上的key(把结果放在栈上相同位置)。在Lua中,这个函数可能触发对应index事件的元方法 。


Lua:

local array = {'a', 'b', 'c'}

Cpp:

void readLuaArray(lua_State *L)
{
    //获取全局变量array
    lua_getglobal(L, "array");
    //获取array长度,因为array在栈顶,所以索引为-1,此代码等同于#array
    int n = lua_objlen(L, -1);
    for (int i = 1; i <= n; ++i)
    {
        //将要查找的key压入栈中,因为table索引是从1开始
        lua_pushnumber(L, i);
        //将栈顶元素作为key,查找索引位置的tabel的值,并把key弹出压入value
        //此处栈顶为刚压入的i,往下一个才是array,故索引为-2
        //此处可以用lua_rawget代替,因为已知array是个数组型table,故可以跳过元方法,这样效率更快
        lua_gettable(L, -2);
        //将栈顶元素转为char*
        cout<<lua_tostring(L, -1)<<endl;
        //弹出栈顶元素value,以便下一轮循环,array依然在栈顶
        lua_pop(L, 1);
    }
}

输出结果:

a
b
c

文章作者: 王梓臣
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 王梓臣 !
 上一篇
lua_settable和lua_rawset用法 lua_settable和lua_rawset用法
lua_settablevoid lua_settable (lua_State *L, int index); 等价于t[k] = v的操作, 这里t是一个给定有效索引index处的值, v指栈顶的值,而k是栈顶之下的那个值。 这个函数会
2020-12-05
下一篇 
lua_next用法 lua_next用法
lua_next用法int lua_next (lua_State *L, int index); 先从栈顶弹出一个key 从栈指定位置的 table 里取相对于刚刚弹出的key的下一对key-value,先将key入栈再将 value入
2020-12-05
  目录