Каков интерфейс C для Lua для доступа к парам ключ/значение таблицы?

StackOverflow https://stackoverflow.com/questions/966568

Вопрос

В Lua с помощью С интерфейс, учитывая таблицу, как мне перебирать пары ключ/значение таблицы?

Кроме того, если некоторые элементы таблицы добавляются с использованием массивов, нужен ли мне отдельный цикл для их перебора или существует единственный способ перебора этих элементов одновременно с парами ключ/значение?

Это было полезно?

Решение

lua_next() это то же самое, что и Lua next() функция, которая используется pairs() функция.Он перебирает все элементы, как в части массива, так и в части хеша.

Если вам нужен аналог ipairs(), lua_objlen() дает вам ту же функциональность, что и #.Используйте его и lua_rawgeti() для численного перебора части массива.

Другие советы

Как говорит Хавьер, вы хотите lua_next() функция.Я подумал, что пример кода может помочь прояснить ситуацию, поскольку на первый взгляд его может быть немного сложно использовать.

Цитата из мануала:

Типичный обход выглядит так:

/* table is in the stack at index 't' */
lua_pushnil(L);  /* first key */
while (lua_next(L, t) != 0) {
   /* uses 'key' (at index -2) and 'value' (at index -1) */
   printf("%s - %s\n",
          lua_typename(L, lua_type(L, -2)),
          lua_typename(L, lua_type(L, -1)));
   /* removes 'value'; keeps 'key' for next iteration */
   lua_pop(L, 1);
}

Быть в курсе, что lua_next() очень чувствителен к значению ключа, оставшемуся в стеке. Не вызов lua_tolstring() на ключе, если только он на самом деле не является строкой, потому что эта функция будет заменять значение, которое он преобразует.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top