前言
今天这个函数是一个非常非常危险的函数,我的电脑今天因为这个函数崩溃了两次,奇怪的是这个函数虽然在lua5.1的版本说明文档里,但是网上却几乎找不到关于它的任何用法。即使有个别的使用方法,在我的这个版本Lua5.1里也是运行不了的,提示语法错误。记过几番周折我终于试着写出了一种使用方式,但是我看不出他究竟有什么使用价值,我们还是一起来看一下吧。
内容
load
- 原型:load(func [, chunkname])
- 解释:使用参数
func
所指定的函数来加载程序块来获得程序片段,每一次调用函数func
必须返回一个字符串,这个字符串连接了先前调用的结果,如果返回一个空串""
、nil
、或者不返回值都标志着程序块的结束。 - 如果没有错误函数会返回编译好的程序块作为一个函数,否则将会返回nil和错误信息,函数的运行环境是全局环境,参数
chunkname
通常被用来作为错误信息和调试信息使用,当省略时默认为"(load)" 。
usage
- 首先我们新建一个文件将文件命名为loadtest.lua然后编写代码如下:
-- 用来计数调用次数
local n = 0
-- 用来作为可以影响的变量
w = 0
-- 被掉函数
local function test(w)
n = n + 1;
print("test load function "..n.." times")
if n > 10 then
return nil
else
return "w = w + 1;"
end
end
-- 输出被调函数
print("\ntest function is", test, "\n")
-- 运行load
local 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"
end
print("\nsecond load", load(func_error, "use func_error"))
- 运行结果
总结
- 先说说这个函数为什么把我的电脑整崩溃了,原因是一开始不会用,在网上费了好长时间找了一个程序,写完代码测试——死循环了,一般的死循环沾满一个CPU,这个程序可倒好,4个CPU全是100%,导致电脑崩溃了。
- 它出现死循环的原因就是由于他的结束条件,它会不断的调用函数
func
,知道它返回空串、nil
或者是不返回,可是一般写好的函数,怎么会突然不返回,结果一直返回就死循环了。 - 再说说返回值中代码块使用的变量
w
居然得是全局变量,否则编译不过去,我不知道这么做有什么意义。 - 最后生成函数的代码里相当于有10句
w = w +1;
代码,由运行结果也证实了这一点。 - 运行到最后我还是不明白这个函数究竟应该运用在什么场景下,请知道原因的大神们得我指点一下,谢谢了。