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

发布于 2024-07-23 08:37:37 字数 127 浏览 3 评论 0原文

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

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

In Lua, using the C interface, given a table, how do I iterate through the table's key/value pairs?

Also, if some table table members are added using arrays, do I need a separate loop to iterate through those as well or is there a single way to iterate though those members at the same time as the key/value pairs?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

尤怨 2024-07-30 08:37:38

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

引用手册:

典型的遍历如下所示:

/* 表位于堆栈中的索引 't' */ 
  lua_pushnil(L);   /* 第一个键 */ 
  while (lua_next(L, t) != 0) { 
     /* 使用“key”(在索引-2处)和“value”(在索引-1处)*/ 
     printf("%s - %s\n", 
            lua_typename(L, lua_type(L, -2)), 
            lua_typename(L, lua_type(L, -1))); 
     /* 删除“值”;   为下一次迭代保留“密钥”*/ 
     lua_pop(L, 1); 
  } 
  

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

As Javier says, you want the lua_next() function. I thought a code sample might help make things clearer since this can be a little tricky to use at first glance.

Quoting from the manual:

A typical traversal looks like this:

/* 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);
}

Be aware that lua_next() is very sensitive to the key value left on the stack. Do not call lua_tolstring() on the key unless it really is already a string because that function will replace the value it converts.

缱绻入梦 2024-07-30 08:37:38

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

如果您想要 ipairs() 的类似物,lua_objlen() 可以为您提供与 # 相同的功能。 使用它和 lua_rawgeti() 来对数组部分进行数字迭代。

lua_next() is just the same as Lua's next() function, which is used by the pairs() function. It iterates all the members, both in the array part and the hash part.

If you want the analogue of ipairs(), the lua_objlen() gives you the same functionality as #. Use it and lua_rawgeti() to numerically iterate over the array part.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文