Я пытаюсь зарегистрировать модуль Lua C, который мне нужно использовать следующим образом.Модули Lua C: путают о включении членов
local harfbuzz = require 'harfbuzz'
-- initialize blob
local blob = harfbuzz.Blob.new(…)
print(blob:length())
Я понимаю, что я должен создать новую таблицу и добавить метатаблицу к нему с методами, а затем добавить эту таблицу в качестве члена Blob
к Lib таблицы верхнего уровня.
Вот соответствующий фрагмент кода в моем файле C. Я не очень уверен, что включить в функцию register_blob
. Я попробовал несколько вещей, и они не сработали.
static const struct luaL_Reg blob_methods[] = {
{ "length", blob_length },
{"__gc", blob_destroy },
{ NULL, NULL },
};
static const struct luaL_Reg blob_functions[] = {
{ "new", blob_new },
{ NULL, NULL }
};
static const struct luaL_Reg lib_table [] = {
{"version", get_harfbuzz_version},
{NULL, NULL}
};
int register_blob(lua_State *L) {
// QUESTION: What should I include here
}
int luaopen_luaharfbuzz (lua_State *L) {
lua_newtable(L);
register_blob(L);
luaL_setfuncs(L, lib_table, 0);
return 1;
}
Спасибо, что написали такой всеобъемлющий ответ. – vyom
Конечно, вы можете передать реестр Lua: 'lua_pushvalue (L, LUA_REGISTRYINDEX)'. Это то, что 'debug.getregistry' делает ... – siffiejoe
@siffiejoe: Отмечено и исправлено. –