Lua用于访问表的键/值对的C接口是什么?

问题描述 投票:3回答:2

在Lua中,使用C接口,给定一个表,如何遍历表的键/值对?

另外,如果使用数组添加了一些表表成员,我是否需要一个单独的循环来迭代这些成员,或者是否有一种方法可以同时迭代这些成员作为键/值对?

c interface lua key-value keyvaluepair
2个回答
6
投票

lua_next()与Lua的next()函数相同,pairs()函数使用它。它迭代数组部分和散列部分中的所有成员。

如果你想要ipairs()的模拟,lua_objlen()为你提供与#相同的功能。使用它和lua_rawgeti()以数字方式迭代数组部分。


10
投票

正如哈维尔所说,你想要lua_next()功能。我认为代码示例可能有助于使事情更清晰,因为乍一看这可能有点棘手。

引自手册:

典型的遍历如下所示:

/* table is in the stack at index 't' */
lua_pushnil(L);  /* first key */
while (lua_next(L, t) != 0) {
   /* uses 'key' (at index -2) and 'value' (at index -1) */
   printf("%s - %s\n",
          lua_typename(L, lua_type(L, -2)),
          lua_typename(L, lua_type(L, -1)));
   /* removes 'value'; keeps 'key' for next iteration */
   lua_pop(L, 1);
}

请注意,lua_next()对堆栈上留下的键值非常敏感。不要在键上调用lua_tolstring(),除非它确实已经是一个字符串,因为该函数将替换它转换的值。

© www.soinside.com 2019 - 2024. All rights reserved.