Ссылка на функцию Lua в C/С++
У меня есть функции, вложенные относительно глубоко в набор таблиц. Есть ли способ в C/С++ получить "ссылку" на эту функцию и нажать на нее (и args) в стек, когда мне нужно его использовать?
Ответы
Ответ 1
Это то, к чему предназначена справочная система . Вызов функции r = luaL_ref(L, LUA_REGISTRYINDEX)
сохраняет значение в верхней части стека в реестре и возвращает целое число, которое может быть сохранено на стороне C и использовано для извлечения значения с помощью вызова функции lua_rawgeti(L, LUA_REGISTRYINDEX, r)
.
См. главу luaL_ref()
, lua_rawgeti()
и luaL_unref()
для полной истории.
Ответ 2
API Lua (http://www.lua.org/manual/5.1/manual.html#3) может использоваться для доступа к любым элементам таблицы, которые вы хотите. Используйте lua_gettable(), чтобы извлечь элемент таблицы и поместить его в стек lua, если член также является таблицей, просто вызовите lua_gettable() еще раз, чтобы получить доступ к этой таблице, и так далее...
(В зависимости от того, что вы делаете, lua_rawget() может быть лучшим выбором, чем lua_gettable())
Addtional в ответ на комментарий:
Хорошо, что немного интереснее. Ну, таблица является ссылочным объектом (более или менее), поэтому вы, вероятно, будете безопасны для сохранения самой внутренней справочной таблицы.
Поскольку API-интерфейс lua, похоже, не имеет никакого отношения к прямому обращению с таблицей ref, вам, вероятно, придется нажать ref в глобальном, или если это не работает с новой таблицей с одной табличной записью. Когда вы захотите дать ссылку позже, просто получите ее из глобальной.
например.
// Final table reference is now at top of stack, after multiple dereferences
lua_setglobal( L, "mytableref" );