用于访问表的键/值对的 Lua 的 C 接口是什么?
在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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
正如哈维尔所说,你想要
lua_next()
函数。 我认为代码示例可能有助于使事情变得更清晰,因为乍一看使用起来可能有点棘手。引用手册:
请注意,
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:
Be aware that
lua_next()
is very sensitive to the key value left on the stack. Do not calllua_tolstring()
on the key unless it really is already a string because that function will replace the value it converts.lua_next()
与 Lua 的next()
函数相同,由pairs()
函数使用。 它迭代数组部分和哈希部分中的所有成员。如果您想要
ipairs()
的类似物,lua_objlen()
可以为您提供与#
相同的功能。 使用它和 lua_rawgeti() 来对数组部分进行数字迭代。lua_next()
is just the same as Lua'snext()
function, which is used by thepairs()
function. It iterates all the members, both in the array part and the hash part.If you want the analogue of
ipairs()
, thelua_objlen()
gives you the same functionality as#
. Use it andlua_rawgeti()
to numerically iterate over the array part.