在Lua C++中访问由表键索引的表。

Lua的表可以有一个表作为键,例如:

a = {[{}]=true}

我想知道如何从Lua C++ API中将其索引。例如,我可以执行:

lua_getfield(L, -1, variablename);

获取堆栈上表的字符串键值。如何将具有表值键的表放入堆栈上?

点赞
用户734069
用户734069

lua_getfield 只是一些特定操作的语法糖,这些操作您也可以自己完成:

lua_pushstring(L, variablename);
lua_gettable(L -1 - 1);  //减一表示您的表现在实际上是位于堆栈顶部以下一个索引处。

您将键推入堆栈,然后使用 lua_gettable 访问它。这是针对任何类型的键都适用的。

唯一要回答的问题是:如何首先获得该键。对此,需要自行解决。每个 Lua 表都与其他 Lua 表的值不同。如果 Lua 脚本只是将一个新创建的 Lua 表强制夹在键中,而没有将表引用递给您或全局存储引用,则无法操作。

那么,您唯一的选择就是使用 lua_next 遍历表,并希望类型为“table”的键是您正在寻找的键。

2013-06-17 04:25:20
用户2458544
用户2458544

我认为你需要用 lua_next 迭代表格。

这个链接描述了这个过程: http://pgl.yoyo.org/luai/i/lua_next

调查迭代的表并确定是否是你要查找的那个表。

2013-06-17 05:46:37