В 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
. Глупая ошибка.