加载程序.jpg
前言
今天来看一个比较清晰的加载函数,这个函数功能非常清晰,就是从文件中加载内容并封装成一个函数返回,相比函数load()
来说好理解多了,接下来我们一起看一下这个函数的使用方法。
内容
loadfile
- 原型:loadfile([filename])
- 解释:函数会从参数
filename
指定的文件中加载内容,并将内容封装成一个函数返回,当参数filename
被省略时,函数loadfile()
默认从标准输入来获取内容。
usage
- 首先我们新建一个文件将文件命名为loadfiletest.lua然后编写代码如下:
-- 查一下加载之前有没有这个函数
print("\nbefore loadfile print_func1 is", print_func1)
-- 加载文件
local func = loadfile("loadfileinput.lua")
-- 查一下加载之后有没有这个函数
print("\nafter loadfile print_func1 is", print_func1)
print("\nfunc is", func);
print("\nfunc() run result is", func())
-- 执行返回的函数以后查询fun函数是否存在
print("\nafter func print_func1 is", print_func1)
print("\nprint_func1() run result is :")
print_func1("runnig print_func1")
-- 查一下局部函数是否存在
print("\nafter func print_func2 is", print_func2)
- 其中代码中的
loadfileinput.lua
为需要加载的外部文件,具体代码如下:
-- 定义一个全局函数
function print_func1(var)
print("var1 = "..var)
end
-- 定义一个局部函数
local function print_func2(var)
print("var2 = "..var)
end
-- 自定义函数体
local i = 100
i = i+ 1
return i
- 运行结果
base_loadfile.png
总结
- 由结果可以看出,这个
loadfile()
函数的返回值是一个函数,被返回函数的内容是被加载文件的全部内容。 - 被加载文件中的函数或者语句仅仅会被加载编译,但是不会被执行,只有被返回的函数执行以后才会创建这些函数和执行文件中的语句。
- 被加载文件中的全局函数可以在返回的函数
func()
执行之后使用,而局部函数是不可以的。 - 不知道大家有没有这样的疑惑,被返回的函数
func()
怎么添加参数呢?我一开始也很迷惑,后来想想确实也没有什么必要,这个函数就是用来加载那个文件的,而大多数人也不会把逻辑直接写在文件中而不定义函数,所以我个人感觉并不是需要传进去什么参数。