функции luaopen - PullRequest
       18

функции luaopen

3 голосов
/ 09 марта 2011

Я нашел в примере кода lua следующие вызовы:

luaopen_table(L);
luaopen_io(L);
luaopen_string(L);
luaopen_math(L);

Я искал в заголовочных файлах lua и нашел другие функции с luaopen:

LUALIB_API int (luaopen_base) (lua_State *L);
LUALIB_API int (luaopen_table) (lua_State *L);
LUALIB_API int (luaopen_io) (lua_State *L);
LUALIB_API int (luaopen_os) (lua_State *L);
LUALIB_API int (luaopen_string) (lua_State *L);
LUALIB_API int (luaopen_math) (lua_State *L);
LUALIB_API int (luaopen_debug) (lua_State *L);
LUALIB_API int (luaopen_package) (lua_State *L);

Не могли бы вы объяснить, чтоэти функции значат?Например, могу ли я использовать таблицы, если я не вызову luaopen_table?Я не нашел никакой документации по этому поводу!

Ответы [ 2 ]

7 голосов
/ 09 марта 2011

Если вы используете Lua 5.1, которая является последней версией, Справочное руководство имеет ответ:

Чтобы иметь доступ к этим библиотекам, C хост-программа должна вызывать Функция luaL_openlibs, которая открывается все стандартные библиотеки. С другой стороны, он может открыть их индивидуально вызов luaopen_base (для основного библиотека), luaopen_package (для библиотека пакетов), luaopen_string (для библиотека строк), luaopen_table (для библиотеки таблиц), luaopen_math (для математической библиотеки), luaopen_io (для библиотеки ввода / вывода), luaopen_os (для операционной системы библиотека) и luaopen_debug (для библиотека отладки). Эти функции объявлено в lualib.h и не должно быть позвонил прямо: ты должен позвонить им как любая другая функция Lua C, например, используя lua_call.

[...]

Функции luaopen_ * (чтобы открыть библиотеки) не могут быть вызваны напрямую, как обычная функция C. Они должны быть вызванным через Lua, как Lua функция.

И да, вы все еще можете использовать таблицы, если вы не импортируете библиотеку таблиц, они встроены. У вас просто нет доступа к функциям манипулирования таблицами .

3 голосов
/ 19 июня 2011

Вы должны поместить их в стек, чтобы вызывать их, как если бы вы работали с обычной функцией lua.

lua_State *l = lua_open();
lua_pushcfunction(l,luaopen_base);
lua_call(l,0,0);
lua_pushcfunction(l,luaopen_math);
lua_call(l,0,0);
lua_pushcfunction(l,luaopen_string);
lua_call(l,0,0);
lua_pushcfunction(l,luaopen_table);
lua_call(l,0,0);
...