Ответы пользователя по тегу Lua
  • Зачем существует registry в lua?

    @zedxxx
    Об этом подробно написано в документации: https://www.lua.org/manual/5.3/manual.html#4.5

    Lua предоставляет реестр, предопределенную таблицу, которая доступна C коду для хранения любых Lua значений. Таблица рееста всегда расположена по псевдоидексу LUA_REGISTRYINDEX. Любая C библиотека может хранить данные в этой таблице, но она должна заботиться о выборе уникальных ключей, чтобы избежать коллизий с другими библиотеками. Обычно, вы должны использовать в качестве ключа строку содержащую имя библиотеки, или легкие пользовательские данные (light userdata) с адресом C объекта в вашем коде, или любой Lua объект созданный вашим кодом. Как и имена переменных, ключи, начинающиеся с подчеркивания со следующими за ним прописными буквами, зарезервированы для Lua.

    Целочисленные ключи в реестре используются механизмом ссылок (см. luaL_ref) и некоторыми предопределенными значениями. Следовательно, целочисленные ключи не должны использоваться для других целей.

    Когда вы создаете новый Lua контекст, его реестр содержит некоторые предопределенные значения. Эти предопределенные значения индексируются целочисленными ключами, определенными как константы в lua.h. Определены следующие константы:

    • LUA_RIDX_MAINTHREAD: По этому индексу в реестре расположен главный поток контекста. (Главный поток создается при создании контекста.)
    • LUA_RIDX_GLOBALS: По этому индексу в реестре расположено глобальное окружение.


    Так же, есть небольшой пример использования в Programming in Lua: https://www.lua.org/pil/27.3.1.html
    Ответ написан
    4 комментария
  • Почему в массиве одновременное добавление и удаление вызывает ошибку?

    @zedxxx
    В документации к lua 5.1, в описании функции next сказано:

    The behavior of next is undefined if, during the traversal, you assign any value to a non-existent field in the table. You may however modify existing fields. In particular, you may clear existing fields.


    т.е. можно изменять или удалять существующие элементы, но нельзя добавлять новые.

    В доках к lua 5.3 я такого замечания не нашёл (плохо искал?), но вообще, с практической точки зрения, добавление новых элементов в таблицу во время итерирования по ней, очень плохая идея.
    Ответ написан
    3 комментария