【问题标题】:How to assign C++ vector to non-table global variable如何将 C++ 向量分配给非表全局变量
【发布时间】:2018-12-05 01:22:12
【问题描述】:

我正在尝试将浮点向量分配给 Lua 的全局变量。

首先,当我将向量分配给已键入表的变量时,我的代码可以正常工作。

但是,当我将向量分配给非表变量时,它会崩溃。 (例如 nil、数字、字符串)

这是我的代码。

  // get global table
  lua_getglobal(L, "mytab");

 // if it is table, clear table
 if(lua_istable(L, -1)) {
    lua_pushvalue(L, -1);
    lua_pushnil(L);

    while (lua_next(L, -2)) {
        lua_pop(L, 1);
        lua_pushvalue(L, -1);
        lua_pushnil(L);
        lua_settable(L, -4);
    }
    lua_pop(L, 1);
  }
  // set table
  vector<float> vec = {1,2,3,4,5};
  for (int i=0; i<vec.size(); ++i) {
      lua_pushinteger(L, i+1);
      lua_pushnumber(L, vec[i]);
      lua_settable(L, -3);
   }
   lua_pop(L, 1);

如果全局变量 mytab 设置为 nilnumberstring,在 Lua 中调用它会导致崩溃。

我该如何解决这个问题?谢谢!

【问题讨论】:

  • 您是否可能需要实际创建该表?使用 lua_createtable?
  • @Federico 不,我想将表分配给现有变量。

标签: c++ lua lua-table


【解决方案1】:

您似乎想为全局变量mytab 设置一个新表。所以,忘记第一部分就去做吧:

  // set table
  lua_newtable(L);
  vector<float> vec = {1,2,3,4,5};
  for (int i=0; i<vec.size(); ++i) {
      lua_pushinteger(L, i+1);
      lua_pushnumber(L, vec[i]);
      lua_settable(L, -3);
   }
  lua_setglobal(L, "mytab");

【讨论】:

  • 这是将浮点数分配给全局变量的正确方法吗? lua_pushglobaltable(L); lua_pushnumber(L, flt); lua_setfield(L, -2, name); lua_pop(L, 1);
  • @ZackLee,这可行,但更简单:lua_pushnumber(L, flt); lua_setglobal(L, name);
猜你喜欢
  • 2017-06-25
  • 1970-01-01
  • 1970-01-01
  • 2016-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-03
  • 1970-01-01
相关资源
最近更新 更多