2012-04-23 4 views
1

Если у меня есть глобальная таблица Table, которая имеет функцию getValue(), setValue() и т.д. Могу ли я хранить ссылку на Table.getValue или я должен хранить ссылку на Table, а затем вызывать функции-членов?Lua - Ссылки на функцию в таблицах

lua_getglobal(L, "Table"); 

lua_getfield(L, -1, "getValue"); 
getValueRef = luaL_ref(L, LUA_REGISTRYINDEX); 

lua_getfield(L, -1, "setValue"); 
setValueRef = luaL_ref(L, LUA_REGISTRYINDEX); 

lua_pop(L, 1); // Pop "Table" off of the stack 

ответ

3

В Lua нет такой функции, как «функция-член». Существует просто функция, которая является значением . Вы можете хранить функции где угодно, непосредственно в глобальной таблице, в какой-либо другой таблице, которую вы создаете, и т. Д. Функции (и все значения Lua, если на то пошло) не связаны ни с какой таблицей, в которой они будут храниться.

Если вы хотите сохранить функцию где-нибудь (и создание «ссылки» - это не что иное, как ее хранение где-нибудь), вы можете.

FYI: Не рекомендуется напрямую использовать реестр для ссылок Lua. Я бы предложил создать таблицу, которую вы храните в определенном слоте в реестре, для использования в ваших ссылках. Конечно, я бы сказал, что не рекомендуется использовать «ссылки» для того, что вы делаете.

+0

Моя способность извращать руководство Lua никогда не перестает удивлять меня. Благодарю. – Mastax

0

Вы всегда можете создать «связанную» функцию в качестве закрытия:

local tbl=Table 
local function TableGetValue(key) 
    return tbl:getValue(key) 
end 

do_stuff_with(TableGetValue) 
Смежные вопросы