Вызов функции Lua из C довольно прямолинейный, но есть ли способ сохранить функцию Lua где-то для последующего использования? Я хочу сохранить определенные пользователем функции Lua, переданные моей функции C для использования в событиях, подобно тому, как функция Connect работает в wxLua.
Хранить функцию Lua?
Ответ 1
проверьте реестр (luaL_ref()
). он управляет простой таблицей, которая позволяет вам хранить любое значение Lua (например, функцию) и ссылаться на него с C простым простым числом.
Ответ 2
Основываясь на ответе Хавьера, у Lua есть специальная универсально доступная таблица, называемая реестром, доступная через API C с использованием псевдоиндекса LUA_REGISTRYINDEX
. Вы можете использовать функцию luaL_ref
для хранения любого значения Lua, которое вам нравится в реестре (включая функции Lua), и получить обратно целое число, которое можно использовать для ссылки на него из C:
// Assumes that the function you want to store is on the top of stack L
int function_index = luaL_ref(L, LUA_REGISTRYINDEX);
Ответ 3
Самый простой способ сделать это - использовать функцию "имя" и текст функции lua. Затем вы создаете таблицу в интерпретаторе (если она не существует), а затем сохраняйте функцию в таблице, используя именованный параметр.
В вашем приложении просто держите список имен функций, привязанных к каждому событию. Когда событие срабатывает, просто вызовите все функции из вашей таблицы, чей ключ соответствует именам в списке.