Как назначить вектор C ++ для не табличной глобальной переменной - PullRequest
0 голосов
/ 26 июня 2018

Я пытаюсь назначить вектор чисел с плавающей точкой для глобальной переменной Lua.

Прежде всего, мой код работает нормально, когда я назначаю вектор переменной, которая уже является типизированной таблицей.

Однако происходит сбой, когда я назначаю вектор переменной, которая не является таблицей. (например, ноль, число, строка)

Вот мой код.

  // 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);

Вызов этого в Lua вызывает сбой, если глобальная переменная mytab установлена ​​в nil, number или string.

Как я могу это исправить? Спасибо!

1 Ответ

0 голосов
/ 26 июня 2018

Кажется, вы хотите установить новую таблицу для глобальной переменной 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");
...