как создать многомерный массив в lua с lau C api

У меня есть запрос о связывании языков lua и c.

пример использования lua)

a[1].b.c[1].d = 1
a[1].b.c[2].d = 2
a[2].b.c[1].d = 3
a[2].b.c[2].d = 4

Мне интересно, как создать это с помощью lua C api. Это код, который я использовал в C

    lua_createtable(L, 2, 0);
lua_pushnumber(L, 1);
{
    lua_createtable(L, 0, 1);
    {
        lua_newtable(L);
        lua_pushnumber(L, 1);
        {
            lua_pushnumber(L, 49);
            lua_setfield(L, -2, "d");
            lua_settable(L, -3);
        }
        lua_pushnumber(L, 2);
        {
            lua_pushstring(L, "old");
            lua_setfield(L, -2, "d");
            lua_settable(L, -3);
        }
        lua_setfield(L, -2, "c");
    }
    lua_setfield(L, -2, "b");
}
lua_pushnumber(L, 2);
{
    lua_createtable(L, 0, 1);
    {
        lua_newtable(L);
        lua_pushnumber(L, 1);
        {
            lua_pushnumber(L, 49);
            lua_setfield(L, -2, "d");
            lua_settable(L, -3);
        }
        lua_pushnumber(L, 2);
        {
            lua_pushstring(L, "old");
            lua_setfield(L, -2, "d");
            lua_settable(L, -3);
        }
        lua_setfield(L, -2, "c");
    }
    lua_setfield(L, -2, "b");
}
lua_setglobal(L, "a");

Кстати PANIC: незащищенная ошибка при вызове Lua API (попытка проиндексировать числовое значение) У меня такая ошибка

Большое спасибо за то, что сказал мне это.


person P.Kwon    schedule 13.11.2020    source источник
comment
Почему вы делаете lua_pushnumber после каждого lua_newtable? Кроме того, почему вы так комбинируете lua_setfield и lua_settable? Возможно, вы могли бы добавить несколько комментариев к своему коду, чтобы прояснить ситуацию, иначе его будет очень трудно читать.   -  person DarkWiiPlayer    schedule 13.11.2020


Ответы (1)


person    schedule
comment
Спасибо за ответ. Что мне делать, чтобы сделать это, как код lua в вопросе? Спасибо, что показали мне пример. Я общаюсь с lua всего две недели, поэтому я плохо знаю, поэтому, пожалуйста, поймите. - person P.Kwon; 13.11.2020
comment
Обычно вы делаете это правильно, но индексировали неправильные элементы в стеке. Будет проще, если вы начнете с простой таблицы, скомпилируете, посмотрите, работает ли она, а затем постепенно добавите сложность, чтобы, когда она сломается, вы знаете, где: D @ P.Kwon - person DarkWiiPlayer; 13.11.2020
comment
a [1] .b.c.d = 1 Такое выражение было успешным. Кстати, я не знаю, как выразить [1] .b.c [1] .d = 1 вот так. Как мы можем выразить [1] .b.c [1] .d = 1? Это действительно срочно. Могу я увидеть пример? - person P.Kwon; 16.11.2020