Я хочу создать функцию C, которая принимает таблицу lua со строками в качестве параметра, а в таблице lua нет ключей, только значения. Как я могу это сделать? Я не могу разобраться. Я ничего не нашел, когда искал в гугле.
Lua таблица строковых значений в качестве параметра в функции C
comment
Вы смотрели книгу Programming in Lua? Особенно 24 глава.
- person hjpotter92   schedule 13.03.2015
comment
@hjpotter92 Нет, завтра посмотрю, спасибо за предложение
- person Erik W   schedule 13.03.2015
comment
Вы знаете, как работают таблицы в Lua? (подсказка: они содержат пары ключ/значение, нет ключей без значений или значений без ключей)
- person user253751   schedule 13.03.2015
comment
@immibis Но у них есть ключ по умолчанию, если вы не указываете его сами, верно?
- person Erik W   schedule 13.03.2015
comment
@ErikW Ключи по умолчанию представляют собой последовательные целые числа, начиная с 1.
- person user253751   schedule 13.03.2015
comment
@immibis 5 тогда как получить к ним доступ из lua_getfield
- person Erik W   schedule 13.03.2015
comment
@ErikW нет, потому что это работает только для строковых ключей.
- person user253751   schedule 14.03.2015
Ответы (1)
Ключи «по умолчанию» в таблице — это последовательные целые числа, начинающиеся с 1. Это:
{"hello", "world"}
такой же как:
{[1] = "hello", [2] = "world"}
Вы не можете получить доступ к этим записям с помощью lua_getfield
, потому что это требует строкового ключа. Вы можете сделать это "вручную" с помощью lua_pushnumber
и lua_gettable
. Если L
— это ваш lua_State*
, t
— это индекс таблицы в стеке, а k
— это ключ, то:
lua_pushnumber(L, k);
lua_gettable(L, t);
должен сделать то же самое, что и:
lua_getfield(L, t, k);
делает для строковых ключей. Обратите внимание, что если t
является относительным индексом (отрицательным числом), то, поскольку вы помещаете в стек другой элемент, вам нужно будет скорректировать его на 1.
person
user253751
schedule
13.03.2015