Lua base load()

加载.png

前言

今天这个函数是一个非常非常危险的函数,我的电脑今天因为这个函数崩溃了两次,奇怪的是这个函数虽然在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"))

  • 运行结果
base_load.png

总结

  • 先说说这个函数为什么把我的电脑整崩溃了,原因是一开始不会用,在网上费了好长时间找了一个程序,写完代码测试——死循环了,一般的死循环沾满一个CPU,这个程序可倒好,4个CPU全是100%,导致电脑崩溃了。
  • 它出现死循环的原因就是由于他的结束条件,它会不断的调用函数func,知道它返回空串、nil或者是不返回,可是一般写好的函数,怎么会突然不返回,结果一直返回就死循环了。
  • 再说说返回值中代码块使用的变量w居然得是全局变量,否则编译不过去,我不知道这么做有什么意义。
  • 最后生成函数的代码里相当于有10句w = w +1;代码,由运行结果也证实了这一点。
  • 运行到最后我还是不明白这个函数究竟应该运用在什么场景下,请知道原因的大神们得我指点一下,谢谢了。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容