如何使用其 C-API 将空表添加到 Lua 中的现有表中?

How to add an empty table to an existing table in Lua using its C-API?

提问人:DrDreadful 提问时间:9/17/2023 最后编辑:DrDreadful 更新时间:9/17/2023 访问量:30

问:

我问题的核心细节是:我不知道该怎么做。

我遇到了我想通过向 Lua 中的现有表添加表来尝试解决的问题。

阻止我自己解决问题的主要困难是无知,尽管我尽了最大努力,但未能找到任何对我解决问题有用的互联网搜索结果。

除其他外,我尝试了以下方法:

  lua_getglobal(L, "OuterTable"); 
    lua_createtable(L, 0,0); 
    lua_pushliteral(L, "InnerTable");
    lua_settable(L,-2);

在考虑了这个问题的公认答案后,我预计“InnerTable”会被添加到“OuterTable”中:

如何使用 C-API 在 Lua 5.1 的表中创建表?

它也用于将表添加到表中,尽管是新创建的表。lua_settable

我还浏览了 Lua 编程,颜色表示例,但我也无法用那个来解决它。

最小可重现示例:

测试.lua

OuterTable = {
    ExampleInnerTable = {}
}

C 中的测试平台(我使用 Lua 5.3,但我的发行版是以一种特殊的方式设置的,所以......我不知道你会如何包含它,要小心)

  #include <lua5.3/lua.h>
  #include <lua5.3/lualib.h>
  #include <lua5.3/lauxlib.h>

int main(int argc, char *argv[])
{
    


  lua_State* L;
  L = luaL_newstate();
  luaL_openlibs(L);
  luaL_dofile(L, "test.lua");

 lua_getglobal(L, "OuterTable"); 
 int c = lua_gettop(L);
 lua_newtable(L);
 lua_pushliteral(L, "InnerTable");
 lua_settable(L,c);

    return 0;
}

基本上,我想添加另一个表,一个像OuterTableExampleInnerTable

期望的结果

OuterTable = {
    ExampleInnerTable = {}
   ,InnerTable = {}
}
lua lua-table lua-api

评论

0赞 Luatic 9/17/2023
您能否提供一个最小的可重现示例,例如,我可以为我的编译器提供一个 C 文件,该文件在执行时不起作用?
0赞 DrDreadful 9/17/2023
我已经用它更新了我的问题(并且不小心删除了我已经告诉过您的评论,同时认为单击新评论上的“删除”会取消评论的创建。因此。。。这个副本。对不起,哈哈。
0赞 DrDreadful 9/17/2023
你知道,我认为这确实有效......我只是未能将初始全局外部表“推”到堆栈上进行检查......因为 settable 会把东西从东西上弹出来。...当。对于给您带来的困惑和不便,我深表歉意。我会删除这样的非问题吗?或者他们会发生什么?
0赞 Luatic 9/17/2023
呵呵,橡皮鸭效应又在起作用:)删除应该没问题。如果你认为你的答案可能对其他人有用,你也可以自己回答(但事实似乎并非如此)。否则,它可能会因“不可重现或由拼写错误引起”而被关闭。
0赞 ESkri 9/18/2023
是的,SO 可以用作橡皮鸭 :-)

答: 暂无答案