luaL_dofile和luaL_loadfile的区别

转载 2015年07月10日 11:55:32

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则是用来错误信息和调试信息用的。


Lua与C/C++之我最初对于luaL_loadfile的一个误解

最开始学习lua嵌入c的时候,一般会写下这样的一个小程序来执行一个脚本文件: 代码:int _tmain(int argc, _TCHAR* argv[]){    // Open lua state...
  • ouyangbuxiu
  • ouyangbuxiu
  • 2005年04月23日 10:24
  • 7538

luaL_dofile和luaL_loadfile的区别

C++调用lua的时候要加载lua文件,用这两个都可以,那么它俩有什么区别呢? 看文档中的解释: luaL_dofile:       它是这样子定义的:       (LuaL_loadfile(L...
  • danjia1234567891011
  • danjia1234567891011
  • 2013年12月01日 23:05
  • 6983

[常见错误 及 解决方案系列]luaL_dofile 失败,返回 1,luaL_dofile错误 返回值 1 怎么解决(仅针对Cocos2d-x 3.5 以后版本暂不知)

原创文章,欢迎转载,转载请注明:文章来自[寒江孤叶丶的 常见错误 及 解决方案 系列] 博客地址:http://blog.csdn.net/qq446569365 这个问题我也纠结了好久,...
  • qq446569365
  • qq446569365
  • 2015年04月13日 13:59
  • 3093

Lua5.3 与C交互学习(一)

C++调用Lua函数 main函数中环境搭建 #include #include extern "C" { #include #include #include } int m...
  • bbhe_work
  • bbhe_work
  • 2015年10月07日 16:57
  • 2227

Lua的基本信息调试(一)

前段时间在项目中试加入了lua脚本,但由于匆忙很不完善,没有任何的调试信息,包括出错信息的打印,所以很是痛苦!最近终于开始着手完善lua程序,只是从没用过,一切都是从头学起!首先是载入脚本的时候:lu...
  • maocl1983
  • maocl1983
  • 2011年02月15日 21:47
  • 4916

VS2015下解决:error LNK2019: 无法解析的外部符号 __iob_func

在使用VS2015下使用libjpeg-turbo静态库,编译时报错了: error LNK2019: 无法解析的外部符号 __iob_func,该符号在函数 output_message 中被引...
  • 10km
  • 10km
  • 2016年01月16日 17:15
  • 17469

dofile和require

         在lua中写个试验性质的小程序可能只要一个脚本文件就搞定了,不过一旦程序上了一定规模,为了方便阅读和维护,分开多个文件就很有必要了。那么如何才能在一个lua脚本文件中调用另一个文件呢...
  • FlowShell
  • FlowShell
  • 2011年03月06日 19:27
  • 12962

lua中dofile,loadfile,require的区别

  • u012861978
  • u012861978
  • 2017年01月22日 11:22
  • 1444

Java filter中的chain.doFilter详解

一.chain.doFilter作用1.一般filter都是一个链,web.xml 里面配置了几个就有几个。一个一个的连在一起 request -> filter1 -> filter2 ->fi...
  • haofengjiao
  • haofengjiao
  • 2017年04月15日 19:32
  • 3355

Java Filter过滤机制详解

Java Filter过滤机制详解 以前以为Filter只是一个特殊点的Servlet,用进只需在web.xml中配置一下拦截路径就可以了,可经过这两天的深入学习,才知道以前对Filter类的了解和...
  • EthanQ
  • EthanQ
  • 2012年03月09日 15:13
  • 6355
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:luaL_dofile和luaL_loadfile的区别
举报原因:
原因补充:

(最多只允许输入30个字)