Я передаю таблицу {Value1 = 100, Value2 = 200, Value3 = 300, ...} из Lua в C. Для моих требуемых значений отлично работает следующее:
// Get the values from the table
lua_getfield(L, 2, "Value1");
lua_getfield(L, 2, "Value2");
lua_getfield(L, 2, "Value3");
const char *value_3 = luaL_checkstring(L, -1);
const char *value_2 = luaL_checkstring(L, -2);
const char *value_1 = luaL_checkstring(L, -3);
Но янеобходимо обрабатывать необязательные поля в таблице, некоторые из которых могут быть неизвестны во время компиляции - но будут известны во время выполнения.Основываясь на всех моих поисках, я думаю, что мне нужно использовать метатаблицу для замены метода __index в таблице, используемой lua_getfield (), чтобы вернуть NIL, вместо того, чтобы выдавать ошибку, если определенный ключ не найден.Тогда я мог бы использовать luaL_checktype () для проверки этого.
Я успешно использовал метатаблицы с пользовательскими данными.Но, несмотря на это, я действительно понятия не имею, как это сделать.