Lua таблица строковых значений в качестве параметра в функции C

Я хочу создать функцию C, которая принимает таблицу lua со строками в качестве параметра, а в таблице lua нет ключей, только значения. Как я могу это сделать? Я не могу разобраться. Я ничего не нашел, когда искал в гугле.


person Erik W    schedule 12.03.2015    source источник
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