2009-02-10 1 views
18

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

ответ

23

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

+2

Lua иого это слишком круто - не могу поверить, что я использовал Lua все это время, не зная об этой функции. Благодаря! –

0

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

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

+0

Эта функциональность уже существует, и это справочная таблица Lua, как сказал Хавьер. –

+0

Проблема с названием функций в этом случае заключается в том, что мы хотим, чтобы пользователь мог определять несколько функций с одним и тем же именем - например, «onclick» для кнопки 1 отличается от «onclick» для кнопки2. –

13

Основываясь на ответе Хавьера, 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); 

 Смежные вопросы

  • Нет связанных вопросов^_^