lua 加载文件相关函数

18 篇文章 16 订阅

 

  重点掌握 require,dofile,loadfile,其他的了解即可。

一、require

  1.功能:载入文件并执行代码块, 对于相同的文件只执行一次,即多次require时,只会执行一次文件的代码块

  2.调用:require("filename").注意这里文件名不能包括后缀名,否则会提示找不到文件.

  注:寻找文件的路径在package.path中,print(package.path)即可得到。

  详情请参考:

  lua require机制

二、dofile

  1.功能:载入文件并执行代码块,对于相同的文件每次都会执行

  2.调用:dofile("filename"),注意这里文件名必须要完整,包括后缀名.  

  3.错误处理:如果代码块中有错误则会引发错误

  4.优点:对简单任务而言,非常便捷

  5.缺点:每次载入文件时都会执行程序块.每次执行时,结果是独立的,即两次操作不会改变同一个全局

  6.定位:内置操作,辅助函数

三、loadfile

  1.功能:载入文件但不执行代码块,对于相同的文件每次都会执行。只是编译代码,然后将编译结果作为一个函数返回

  2.调用:f = loadfile("filename"),注意这里文件名必须要完整,包括后缀名.执行f()时,相当于执行了filename文件的代码块.多次执行时,会改变全局变量

  3.错误处理:不引发错误,只返回错误值但不处理错误,即返回nil和错误消息

 

四、loadstring

    与loadfile类似,不同的是loadstring是从一个字符串中读取代码,而非从文件中读取,即loadfile的参数是一个文件名,而loadstring的参数是一个字符串,同样返回的是一个函数。

    1.特点:功能强大,但开销大;

    2.典型用处:执行外部代码,如:用户的输入

    3.错误错里:代码中如果有语法错误就会返回nil

    4.理解:f = loadstring("i = i+1")  可理解为(但不完全是)f = function()  i = i+1  end  (注:这里的变量"i"是全局变量,不是指局部变量,如果没有定义全局变量"i",调用f()则会报错!,即loadstring不涉及词法域)

      例如:

      i = 32

      local i = 1

      f = loadstring("i = i+1;print(i)")

      g = function() i = i+1;print(i) end 

      f() -->33 --不涉及词法域

      g() -->2  --涉及词法域

    需要注意的是,loadstring在lua 5.2之后被废弃,使用load代替,当第一个参数是string类型时,即相当于以前的loadstring

五、dostring

    类似dofile:加载并运行

六、loadlib(package.loadlib)

  提供所有Lua中关于动态连接的功能,是一个非常底层的函数

  1.功能:加载指定的库,并将其链接入Lua,不会调用库中的任何函数

  2.调用:f = package.loadlib(path,"functionname"):path动态库的完整路径,functionname函数名

  3.错误处理:返回nil及错误消息

七、load

  一般很少使用load    

     理解: load是loadfile 和 loadstring的原始函数,接受一个“读取器函数”,并在内部调用它读取程序块,读取器函数可分几次返回一个程序块,load会反复调用它直到返回nil为止。

              load不会引发错误,但程序块中有错误的时候会返回nil及错误消息

     应用: 当程序块不在文件中,或程序块过大而无法载入到内存时才使用load

 

参考:

http://www.cnblogs.com/heyongqi/p/5167088.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值