Сохранить функцию Lua? - PullRequest
       13

Сохранить функцию Lua?

21 голосов
/ 10 февраля 2009

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

Ответы [ 3 ]

25 голосов
/ 10 февраля 2009

проверка реестра (luaL_ref()). он управляет простой таблицей, которая позволяет вам хранить любое значение Lua (например, функцию) и ссылаться на него из C простым целым числом

14 голосов
/ 05 апреля 2009

Опираясь на ответ Хавьера, у Lua есть специальная универсально доступная таблица, называемая реестром, доступная через C API с помощью псевдоиндекса 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);
0 голосов
/ 10 февраля 2009

Самый простой способ сделать это, чтобы ваша функция взяла «имя» и текст функции lua. Затем вы создаете таблицу в интерпретаторе (если она не существует) и затем сохраняете функцию в таблице, используя именованный параметр.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...