什么是C接口到Lua访问表的键/值对?
-
12-09-2019 - |
题
在Lua中,使用<强> C 强>接口,给定一个表,如何通过表的键/值对迭代?
此外,如果一些表表成员使用阵列加入,还需要一个单独的循环通过这些迭代以及或者是有迭代虽然这些成员在同一时间作为密钥/值对的单一方式<? / p>
解决方案
lua_next()
只是相同lua的next()
功能,它被用来由pairs()
功能。它遍历所有成员,无论是在阵列部分和散列部分。
如果您想ipairs()
的模拟中,lua_objlen()
为您提供了相同的功能#
。使用它,并lua_rawgeti()
到在阵列部分数值迭代。
其他提示
由于哈维尔说,你想要的 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()
,除非它真的已经是一个字符串,因为该功能会的替换的将其转换价值。
不隶属于 StackOverflow