Lua: Как проверить, является ли одно из значений, связанных с указанным ключом таблицы, нулевым, из API - PullRequest
2 голосов
/ 24 апреля 2010

В Луа это разрешено:

table={}
bar
if(table[key]==nil) then
foo

Однако, используя C API, я не смог найти способ проверить, есть ли значение nil в указанной позиции.

lua_getglobal(L,"table");
lua_gettable(L,key);

Если в таблице [ключ] хранится нулевое значение, lua_gettable выдаст мне сообщение «незащищенная ошибка при вызове API Lua (попытка индексировать нулевое значение)».

Есть ли способ проверить, действительно ли с этим ключом что-то связано, прежде чем нажимать клавишу, чтобы сделать это?

1 Ответ

3 голосов
/ 24 апреля 2010

Вы звоните lua_gettable неправильно. Должно быть:

lua_getglobal(L, "tableVar");
lua_pushstring(L, key);   //assuming key is a string
lua_gettable(L, -2);

Второй параметр lua_gettable - это индекс стека для таблицы, а не ключ.

Если ключ является строкой, вместо нее можно вызвать lua_getfield:

lua_getglobal(L, "tableVar");
lua_getfield(L, -1, key);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...