1. <tfoot id='AGOeu'></tfoot>
    2. <small id='AGOeu'></small><noframes id='AGOeu'>

    3. <legend id='AGOeu'><style id='AGOeu'><dir id='AGOeu'><q id='AGOeu'></q></dir></style></legend>

      1. <i id='AGOeu'><tr id='AGOeu'><dt id='AGOeu'><q id='AGOeu'><span id='AGOeu'><b id='AGOeu'><form id='AGOeu'><ins id='AGOeu'></ins><ul id='AGOeu'></ul><sub id='AGOeu'></sub></form><legend id='AGOeu'></legend><bdo id='AGOeu'><pre id='AGOeu'><center id='AGOeu'></center></pre></bdo></b><th id='AGOeu'></th></span></q></dt></tr></i><div id='AGOeu'><tfoot id='AGOeu'></tfoot><dl id='AGOeu'><fieldset id='AGOeu'></fieldset></dl></div>
          <bdo id='AGOeu'></bdo><ul id='AGOeu'></ul>

        如何使用 C API 创建嵌套的 Lua 表

        How to create nested Lua tables using the C API(如何使用 C API 创建嵌套的 Lua 表)
      2. <small id='WFfGj'></small><noframes id='WFfGj'>

          <bdo id='WFfGj'></bdo><ul id='WFfGj'></ul>
          • <tfoot id='WFfGj'></tfoot>

                <i id='WFfGj'><tr id='WFfGj'><dt id='WFfGj'><q id='WFfGj'><span id='WFfGj'><b id='WFfGj'><form id='WFfGj'><ins id='WFfGj'></ins><ul id='WFfGj'></ul><sub id='WFfGj'></sub></form><legend id='WFfGj'></legend><bdo id='WFfGj'><pre id='WFfGj'><center id='WFfGj'></center></pre></bdo></b><th id='WFfGj'></th></span></q></dt></tr></i><div id='WFfGj'><tfoot id='WFfGj'></tfoot><dl id='WFfGj'><fieldset id='WFfGj'></fieldset></dl></div>
                  <tbody id='WFfGj'></tbody>

                  <legend id='WFfGj'><style id='WFfGj'><dir id='WFfGj'><q id='WFfGj'></q></dir></style></legend>
                  本文介绍了如何使用 C API 创建嵌套的 Lua 表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  我想创建一个表格

                  myTable = {
                      [0] = { ["a"] = 4, ["b"] = 2 },
                      [1] = { ["a"] = 13, ["b"] = 37 }
                  }
                  

                  使用 C API?

                  我目前的做法是

                  lua_createtable(L, 0, 2);
                  int c = lua_gettop(L);
                  lua_pushstring(L, "a");
                  lua_pushnumber(L, 4);
                  lua_settable(L, c);
                  lua_pushstring(L, "b");
                  lua_pushnumber(L, 2);
                  lua_settable(L, c);
                  

                  在循环中创建内部表.之前,这个循环,我用

                  to create the inner tables in a loop. Before, this loop, I use

                  lua_createtable(L, 2, 0);
                  int outertable = lua_gettop(L);
                  

                  为 2 个数字槽创建外部表.

                  to create the outer table for 2 numeric slots.

                  但是如何将内表保存到外表?

                  But how can I save the inner tables to the outer table?

                  推荐答案

                  这是一个完整的最小程序,演示了如何嵌套表.基本上你缺少的是 lua_setfield 函数.>

                  Here's a full and minimal program demonstrating how to nest tables. Basically what you are missing is the lua_setfield function.

                  #include <stdio.h>
                  #include "lua.h"
                  #include "lauxlib.h"
                  #include "lualib.h"
                  
                  int main()
                  {
                      int res;
                      lua_State *L = lua_open();
                      luaL_openlibs(L);
                  
                      lua_newtable(L); /* bottom table */
                  
                      lua_newtable(L); /* upper table */
                  
                      lua_pushinteger(L, 4);
                      lua_setfield(L, -2, "four"); /* T[four] = 4 */
                      lua_setfield(L, -2, "T");  /* name upper table field T of bottom table */
                      lua_setglobal(L, "t"); /* set bottom table as global variable t */
                  
                      res = luaL_dostring(L, "print(t.T.four == 4)");
                      if(res)
                      {
                          printf("Error: %s
                  ", lua_tostring(L, -1));
                      }
                  
                      return 0;
                  }
                  

                  程序将简单地打印true.

                  如果你需要数字索引,那么你继续使用lua_settable:

                  If you need numeric indices, then you continue using lua_settable:

                  #include <stdio.h>
                  #include "lua.h"
                  #include "lauxlib.h"
                  #include "lualib.h"
                  
                  int main()
                  {
                      int res;
                      lua_State *L = lua_open();
                      luaL_openlibs(L);
                  
                      lua_newtable(L); /* bottom table */
                  
                      lua_newtable(L); /* upper table */
                  
                      lua_pushinteger(L, 0);
                      lua_pushinteger(L, 4);
                      lua_settable(L, -3);  /* uppertable[0] = 4; pops 0 and 4 */
                      lua_pushinteger(L, 0);
                      lua_insert(L, -2); /* swap uppertable and 0 */
                      lua_settable(L, -3); /* bottomtable[0] = uppertable */
                      lua_setglobal(L, "t"); /* set bottom table as global variable t */
                  
                      res = luaL_dostring(L, "print(t[0][0] == 4)");
                      if(res)
                      {
                          printf("Error: %s
                  ", lua_tostring(L, -1));
                      }
                  
                      return 0;
                  }
                  

                  您可能想使用 lua_objlen,而不是像我那样使用 0 的绝对索引 生成索引.

                  Rather than using absolute indices of 0 like I did, you might want to use lua_objlen to generate the index.

                  这篇关于如何使用 C API 创建嵌套的 Lua 表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

                  相关文档推荐

                  Constructor initialization Vs assignment(构造函数初始化 Vs 赋值)
                  Is a `=default` move constructor equivalent to a member-wise move constructor?(`=default` 移动构造函数是否等同于成员移动构造函数?)
                  Has the new C++11 member initialization feature at declaration made initialization lists obsolete?(声明时新的 C++11 成员初始化功能是否使初始化列表过时了?)
                  Order of constructor call in virtual inheritance(虚继承中构造函数调用的顺序)
                  How to use sfinae for selecting constructors?(如何使用 sfinae 选择构造函数?)
                  Initializing a union with a non-trivial constructor(使用非平凡的构造函数初始化联合)

                  <legend id='0GExo'><style id='0GExo'><dir id='0GExo'><q id='0GExo'></q></dir></style></legend>

                  • <tfoot id='0GExo'></tfoot>
                  • <small id='0GExo'></small><noframes id='0GExo'>

                    • <i id='0GExo'><tr id='0GExo'><dt id='0GExo'><q id='0GExo'><span id='0GExo'><b id='0GExo'><form id='0GExo'><ins id='0GExo'></ins><ul id='0GExo'></ul><sub id='0GExo'></sub></form><legend id='0GExo'></legend><bdo id='0GExo'><pre id='0GExo'><center id='0GExo'></center></pre></bdo></b><th id='0GExo'></th></span></q></dt></tr></i><div id='0GExo'><tfoot id='0GExo'></tfoot><dl id='0GExo'><fieldset id='0GExo'></fieldset></dl></div>
                        <bdo id='0GExo'></bdo><ul id='0GExo'></ul>
                          <tbody id='0GExo'></tbody>