函数dofile是运行Lua代码段的主要方式之一。实际上,函数dofile是一个辅助函数,函数loadfile才完成了真正的核心工作。 函数loadfile也是从文件中加载Lua代码段,但它不会运行代码,而只是编译代码,然后将编译后的代码段作为一个函数返回。 可以将函数dofile理解为如下代码: function dofile (filename) local f = asser...
只有首先执行这个代码块,lua的vm才能最终知道各函数、变量等信息。 调用luaL_loadfile之后,应当接着调用lua_pcall执行匿名代码块,后续C代码才能有效调用Lua的函数。这样显然是比较繁琐的,lua中又提供了luaL_dofile宏来封装这两步过程:(1)加载;(2)执行。 因此,一般情况下,应该使用luaL_dofile来替代luaL_loadfile。
先放上函数原型 int luaL_dofile (lua_State *L, const char *filename); 加载并运行某个文件 int luaL_loadfile (lua_State *L, const char *filename); 加载某个文件 luaL_dofile 其定义为(luaL_loadfile(L, filename) || lua_pcall(L, 0, LUA_MULTRET, 0)) 两者之间的差别就是dofile比load...
(2) loadfile( file_name ) --- 加载文件 这个函数相当于从文件里读出string,然后再调用loadstring(file_text)实现加载功能。 (3) dofile( file_name ) --- 加载并执行文件 相当于loadfile()之后,返回一个函数,再调用这个函数。 (4) require( file_name ) 这个函数是通过调用dofile()来实现的。不同的...
在发生错误的情况下,luaL_loadfile将返回一个错误代码,解释是什么类型的错误。如果有错误,它还会将一个错误消息推入 Lua 栈。如果没有错误发生,它将返回 0。 同样,如果发生错误,luaL_dofile将返回 1,并且错误消息将在 Lua 栈上。 你应该始终检查这些函数的返回值,看看是否发生了错误,并采取相应的措施。
//先分析luaL_loadfile(L,fn),实际调用两个函数 #define luaL_dofile(L, fn) \ (luaL_loadfile(L, fn) || lua_pcall(L, 0, LUA_MULTRET, 0)) 在luaL_loadfile里,主要是几个结构体的传递初始化,因此一些语法上的逻辑将抛开,主要看结构体之间的IO组织和传递。Cpp...
staticintdofile(lua_State *L,constchar*name){intstatus =luaL_loadfile(L, name);if(status == LUA_OK) status = docall(L,0,0);returnreport(L, status); } 开发者ID:hemantagr,项目名称:pktgen-dpdk,代码行数:6,代码来源:lua_shell.c ...
当luaL_loadfile(实际上最终是调用lua_load函数)之后lua_resume并不是必需的,为什么? lua_load读入一段脚本之后把读入的东西当成一个匿名函数放在栈顶上,所以调用lua_resume(L,0); 就会执行这个函数 再看看lua_resume做了些什么就很清楚了:首先在默认情况下,执行一段lua脚本的当前执行环境(function environment)是...
lua_State *L = luaL_newstate();luaL_openlibs(L);if(luaL_loadfile(L, conf) || lua_pcall(L,0,0,0)) { lua_close(L);return-1; } lua_getglobal(L,"is_daemon");//stack index: -12if(lua_isnumber(L,-1)) settings.is_daemon = (int)lua_tonumber(L,-1); ...
luaL_dofile 移植 struct output api thread 转载 mob64ca140ee96c 4月前 62阅读 luaL_dostring函数 Lua 中的函数是一阶类型值(first-class value),定义函数就象创建普通类型值一样(只不过函数类型值的数据主要是一条条指令而已),所以在函数体中仍然可以定义函数。假设函数f2定义在函数f1中,那么就称f2为f1的内...