Как получить значение из таблицы внутри таблицы с помощью Lua?

#c #c #lua

#c #c #lua

Вопрос:

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

Я сохраняю значения в таблице, но для векторных значений ( vec2 , vec3 , и т.д.) Я встраиваю таблицу внутри основной таблицы для хранения нескольких значений, например:

 material = {
    color = {0.2, 0.3, 1}
}
  

Я хочу получить отдельные значения color , и это то, что я пытался получить для первого значения:

 lua_getglobal(L, "material");
if (!lua_istable(L, -1)) {return;};

lua_pushstring(L, "color");
lua_gettable(L, -2);
if (lua_istable(L, -1)) {
    lua_rawgeti(L, -1, 0);
    printf("%fn", lua_tonumber(L, -1));
}
lua_pop(L, 1);
  

Но он только когда-либо печатает 0.0 , независимо от первого значения в color таблице. Что я делаю не так?

Ответ №1:

Первый индекс должен быть 1 , а не 0 .

 lua_rawgeti(L, -1, 1);
  

Комментарии:

1. О, спасибо. Я не понимал, что массивы начинаются с 1 вместо 0 в Lua!

2. На самом деле, индексы начинаются с 1 в Lua. В C API Lua, использующем индексы, вам также необходимо соблюдать это соглашение, поэтому первый индекс будет равен 1. Вы все равно можете поместить значение с индексом 0 в Lua, но это не рекомендуется, и некоторые функции не будут работать должным образом.