![](https://img.haomeiwen.com/i2133677/3cd318da878f13f8.gif)
前言
今天再来看一个更加清晰的加载函数,这个函数和昨天的函数loadfile()
真的很像,就是将后者的从文件中加载改为从字符串中加载,其他的方面几乎没有变化,接下来我们一起看一下这个函数的使用方法。
内容
loadstring
- loadstring(string [,chunkname])
- 解释:函数会从所给的字符串中来加载程序块并运行,常使用这种构造式来调用
assert(loadstring(s))()
,如果省略参数chunkname
,那么它默认为所给的字符串。
usage
- 首先我们新建一个文件将文件命名为loadstring.lua然后编写代码如下:
-- 简单测试
local ret = loadstring("print(\"first test loadstring function.\")")
print("\nthe result ret is", ret)
-- 运行返回值
print("\nthe result of running ret() is:")
ret();
-- 使用常用的方式
print("\nthe result of running common test is:")
assert(loadstring("print(\"common test loadstring function.\")"))()
-- 直接生成一个全局函数
local func = loadstring("function func_test(str) print(\"str = \", str) end")
-- 测试函数是否生成
print("\nbefore run func, functest =", func_test)
func()
print("\nafter run func, functest =", func_test, "\n")
-- 测试参数chunkname的作用
assert(loadstring("i = i + 1", "third test"))()
- 运行结果
![](https://img.haomeiwen.com/i2133677/b0fe8ae229151239.png)
总结
- 由结果一可知,函数
loadstring()
与函数loadfile()
一样,都是返回一个函数。 - 由结果二可知,返回函数的内容就是字符串参数
string
的内容,执行返回的函数时,字符串中的代码就被执行了。 - 结果三展示了这个函数的一般使用方法。
- 结果四展示了如何通过字符串生成一个全局函数,但是无法生成局部函数,并且生成的函数
func_test()
在调用完函数func()
之后才被创建出来 - 最后一个例子展示了参数
chunkname
的作用,就是在错误的提示信息中起到提示作用。
网友评论