Создайте таблицу с ключами таблицы в Lua с C API - PullRequest
0 голосов
/ 24 июля 2010

В Lua вы можете создать таблицу, ключи которой сами являются таблицами:

t = {}
t[{1,2}] = 2

Я хотел бы знать, как сделать аналогичную вещь, используя C API. То есть я пишу C-функцию, вызываемую из Lua, которая будет возвращать таблицу с ключами таблицы. Я пытался выдвинуть таблицу в качестве ключа, а затем использовать lua_settable, но, похоже, он ничего не делает.

Редактировать: Соответствующий код:

lua_createtable(L, 0, n);
for(i = 0; i < n; ++i){
    // push the key table
    lua_createtable(L, 2, 0);
    for(j = 0; j < 2; ++j){
        lua_pushinteger(L, j+1);
        lua_pushinteger(L, j);
        lua_settable(L, -3);
    }
    // push the value table
    lua_createtable(L, 4, 0);
    for(j = 0; j < 4; ++j){
        lua_pushinteger(L, j+1);
        lua_pushnumber(L, j);
        lua_settable(L, -3);
    }
    lua_settable(L, -3);
}

Редактировать : Я был глуп; Я использовал lua_objlen(L, -1) в конце, чтобы проверить размер таблицы, которая возвращает 0, так как нет записей с целочисленными ключами. Кроме того, в коде Lua, который обрабатывал таблицу, я использовал ipairs вместо pairs. Глупая ошибка.

Ответы [ 2 ]

0 голосов
/ 24 июля 2010

Я проверял записи в таблице неправильно. Я отредактировал вопрос с решением.

0 голосов
/ 24 июля 2010

Нажатие таблицы в качестве ключа и использование lua_settable - правильная вещь.Скорее всего, вы просто забыли нажать на значение и фактически сделали t = {{} = nil}, что, конечно, ничего.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...