【问题标题】:Access a table indexed by a table key in lua C++在 lua C++ 中访问由表键索引的表
【发布时间】:2013-06-17 03:42:05
【问题描述】:

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

a = {[{}]=true}

我想知道如何从 lua C++ api 索引它。例如,我可以这样做:

lua_getfield(L, -1, variablename);

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

【问题讨论】:

    标签: c++ lua


    【解决方案1】:

    lua_getfield 只不过是您可以自己执行的一系列命令的语法糖:

    lua_pushstring(L, variablename);
    lua_gettable(L -1 - 1);  //The second minus one represents the fact that your table is actually one index below the top now.
    

    您将密钥压入堆栈,然后使用lua_gettable 访问它。这是真的无论它是什么类型的键。

    您必须回答的唯一问题是首先如何实际获得该密钥。为此......你是你自己的。每个 Lua 表的值都与其他 Lua 表不同。如果您的 Lua 脚本只是像这样在键中插入了一个新创建的 Lua 表,而没有将对该表的引用交给您或在全局范围内存储一个引用,那么您就完蛋了。

    那么你唯一的办法就是iterate through the table with lua_next,并希望类型为“table”的键是你正在寻找的键。

    【讨论】:

    • 谢谢。这样做的方法是在 lua_next 期间识别 table-key,并使用 luaL_ref 存储引用。然后使用 lua_rawgeti(L, LUA_REGISTRYINDEX, ref) 和 lua_gettable(L,-2)。
    【解决方案2】:

    我会说您需要使用lua_next 迭代表。 这个链接描述了这个过程:http://pgl.yoyo.org/luai/i/lua_next

    调查迭代表并确定它是否是您要搜索的表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-18
      • 2016-04-11
      • 2012-09-08
      • 2021-12-17
      • 2021-03-11
      • 2012-09-22
      • 2016-08-09
      相关资源
      最近更新 更多