您的位置:首页 > 编程语言 > Lua

luaL_dofile和luaL_loadfile的区别

2015-07-10 11:55 911 查看
C++调用lua的时候要加载lua文件,用这两个都可以,那么它俩有什么区别呢?

看文档中的解释:

luaL_dofile:

它是这样子定义的:

#define luaL_dofile(L,fn) (LuaL_loadfile(L, filename) || lua_pcall(L, 0, LUA_MULTRET, 0))

因为LuaL_loadfile(L, filename)如果调用成功就放回0,0是false,所以会继续执行lua_pcall()来运行, 所以它不仅【加载】了,还【运行】了。

这个函数的返回值:

0:没有错误

1:有错误

luaL_loadfile:

(1)加载文件的时候把它当一个lua模块。它内部使用的是函数lua_load去加载名为filename的模块。如过文 件名为空,则从标准输入中加载。如果要加载的文件的第一行有符号“#”,则忽略第一行。

(2)该函数的返回结果和lua_load返回的结果相同,但是如果打不开文件或者读取不了的时候有一个额外的错误码LUA_ERRFILE。

(3)和lua_load一样,这个函数【只加载】,【不运行】。

可以很明显的看出来,【luaL_dofile】它不仅【加载】了,还【运行】了,而【luaL_loadfile】则【只单单加载】了而已,记忆的时候记得do多了一个运行的动作。

扩展:

lua_load:


int lua_load(lua_State* L, lua_Reader reader, void* data, const char* chunkname);

用来加载lua模块。加载如果没有错误,则lua_load将要编译的块当做lua函数压到栈顶,否则,往栈顶压错误信息。返回的结果是:

0:没有错误

LUA_ERRSYNTAX:预编译有语法错误

LUA_ERRMEN:内存分配错误

这个函数【只加载】代码块,【不运行】。

lua_load加载的时候会自己识别加载的代码块是字符串还是二进制,并相应的加载它。

lua_load函数使用用户提供的reader函数去读取代码块(可以去查看lua_Reader)。data作为参数传给reader函数的时候它是透明的。

最后那个chunkname则是用来错误信息和调试信息用的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: