Lua, используя необязательные значения таблицы с C API - PullRequest
0 голосов
/ 15 сентября 2018

Я передаю таблицу {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 () для проверки этого.

Я успешно использовал метатаблицы с пользовательскими данными.Но, несмотря на это, я действительно понятия не имею, как это сделать.

1 Ответ

0 голосов
/ 16 сентября 2018

Не нужно слишком усложнять вещи. Если вы хотите получить значение по умолчанию в Lua, перейдите к метатабельному, но если вы можете получить его в C, это очень просто. lua_getfield создает nil, если ключ не может быть найден в таблице, поэтому вы можете сравнить его возвращаемое значение с LUA_TNIL, чтобы проверить, вернул ли он nil (или lua_isnil, если вы используете более старый API). В этом случае используйте значение по умолчанию или выполните luaL_checkstring как обычно.

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