Подтвердить что ты не робот

Хранить функцию Lua?

Вызов функции Lua из C довольно прямолинейный, но есть ли способ сохранить функцию Lua где-то для последующего использования? Я хочу сохранить определенные пользователем функции Lua, переданные моей функции C для использования в событиях, подобно тому, как функция Connect работает в wxLua.

4b9b3361

Ответ 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. Затем вы создаете таблицу в интерпретаторе (если она не существует), а затем сохраняйте функцию в таблице, используя именованный параметр.

В вашем приложении просто держите список имен функций, привязанных к каждому событию. Когда событие срабатывает, просто вызовите все функции из вашей таблицы, чей ключ соответствует именам в списке.