奇怪的是这个函数虽然在lua5.1的版本说明文档里

作者:手机购彩网站编程

图片 1加载.png

今天这个函数是一个非常非常危险的函数,我的电脑今天因为这个函数崩溃了两次,奇怪的是这个函数虽然在lua5.1的版本说明文档里,但是网上却几乎找不到关于它的任何用法。即使有个别的使用方法,在我的这个版本Lua5.1里也是运行不了的,提示语法错误。记过几番周折我终于试着写出了一种使用方式,但是我看不出他究竟有什么使用价值,我们还是一起来看一下吧。

  • 原型:load(func [, chunkname])
  • 解释:使用参数func所指定的函数来加载程序块来获得程序片段,每一次调用函数func必须返回一个字符串,这个字符串连接了先前调用的结果,如果返回一个空串""nil、或者不返回值都标志着程序块的结束。
  • 如果没有错误函数会返回编译好的程序块作为一个函数,否则将会返回nil和错误信息,函数的运行环境是全局环境,参数chunkname通常被用来作为错误信息和调试信息使用,当省略时默认为"" 。
  • 首先我们新建一个文件将文件命名为loadtest.lua然后编写代码如下:
-- 用来计数调用次数local n = 0-- 用来作为可以影响的变量w = 0-- 被掉函数local function test n = n + 1; print("test load function "..n.." times") if n > 10 then return nil else return "w = w + 1;" endend-- 输出被调函数print("ntest function is", test, "n")-- 运行loadlocal retfunc = load(test, "use test")-- 输出结果函数print("nretfunc function is", retfunc)-- 输出影响的变量print("nbefore use function ret func, w = "..w)-- 调用结果函数retfunc()-- 输出影响的变量print("nafter use function ret func, w = "..w)local function func_error() return "1+1"endprint("nsecond load", load(func_error, "use func_error"))
  • 运行结果

图片 2base_load.png

  • 先说说这个函数为什么把我的电脑整崩溃了,原因是一开始不会用,在网上费了好长时间找了一个程序,写完代码测试——死循环了,一般的死循环沾满一个CPU,这个程序可倒好,4个CPU全是100%,导致电脑崩溃了。
  • 它出现死循环的原因就是由于他的结束条件,它会不断的调用函数func,知道它返回空串、nil或者是不返回,可是一般写好的函数,怎么会突然不返回,结果一直返回就死循环了。
  • 再说说返回值中代码块使用的变量w居然得是全局变量,否则编译不过去,我不知道这么做有什么意义。
  • 最后生成函数的代码里相当于有10句w = w +1;代码,由运行结果也证实了这一点。
  • 运行到最后我还是不明白这个函数究竟应该运用在什么场景下,请知道原因的大神们得我指点一下,谢谢了。

本文由手机购彩网站发布,转载请注明来源

关键词: