luaopen功能

Mir*_*pas 3 scripting lua

我在lua示例代码中找到了这些调用:

luaopen_table(L);
luaopen_io(L);
luaopen_string(L);
luaopen_math(L);
Run Code Online (Sandbox Code Playgroud)

我搜索了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);
Run Code Online (Sandbox Code Playgroud)

你能解释一下这些功能是什么意思吗?例如,如果我不调用luaopen_table,我可以使用表吗?我没有找到任何关于此的文档!

fou*_*nes 7

如果你使用的是最新版本的Lua 5.1,参考手册有一个答案:

要访问这些库,C主机程序应调用luaL_openlibs函数,该函数将打开所有标准库.或者,它可以通过调用luaopen_base(用于基本库),luaopen_package(用于包库),luaopen_string(用于字符串库),luaopen_table(用于表库),luaopen_math(用于数学库),luaopen_io来单独打开它们. (对于I/O库),luaopen_os(用于操作系统库)和luaopen_debug(用于调试库).这些函数在lualib.h中声明,不应直接调用:必须像任何其他Lua C函数一样调用它们,例如,使用lua_call.

[...]

luaopen_*函数(打开库)不能像常规C函数那样直接调用.它们必须通过Lua调用,就像Lua函数一样.

是的,如果你不导入表库,你仍然可以使用表,它们是内置的.您只是无权访问表操作函数.