Это то, что luaL_register()
предназначено для одной или нескольких функций. Каноническое использование является частью установки для модуля, написанного на C:
/* actual definitions of modA() and modB() are left as an exercise. */
/* list of functions in the module */
static const luaL_reg modfuncs[] =
{
{ "a", modA},
{ "b", modB},
{ NULL, NULL }
};
/* module loader function called eventually by require"mod" */
int luaopen_mod(lua_State *L) {
luaL_register(L, "mod", modfuncs);
return 1;
}
, где это создает модуль с именем "mod", который имеет две функции с именами mod.a
и mod.b
.
Цитирование руководства для luaL_register(L,libname,l)
:
При вызове с libname
, равным
NULL
, он просто регистрирует все
функции в списке l
(см. luaL_Reg
)
в стол на вершине
стек.
При вызове с ненулевым libname
,
luaL_register
создает новую таблицу t
,
устанавливает его как значение глобального
переменная libname
, устанавливает ее как значение
package.loaded[libname]
и
регистрирует на нем все функции в
список l
. Если есть столик в
package.loaded[libname]
или в переменной
libname
, повторно использует эту таблицу вместо
создание нового.
В любом случае функция покидает таблицу сверху стека.
luaL_register()
можно использовать для помещения функций C в любую таблицу, передав NULL
для второго параметра, пока таблица находится на вершине стека.