编译
loadstring
loadingstring与loadfile类似 不同之处在于它是从一个字符串中读取代码,而非从文件读取。
f=loadstring(“i=i+1”)—此时loadstring返回的是一个函数。
这就是解释性语言的好处,直接在编译之后动态的去加载代码。
假设我们使用loadfile读取文件,文件若是为空调用的时候将会导致异常报错。我们可以使用assert 更清楚地显示错误消息。
当发生错误的时候 assert用来引发一个错误。
f=assert(loadstring(“io_stream=io.read() return io_stream”))
print(f())
记住loadstring 不涉及词法域,loadstring它总是在全局的环境中编译它的代码,意思就是说 代码中并不会操作拿到局部的变量。
示例:
function loadstringGlobal()
i=100
local i=0
f=loadstring("i=i+1")
f()
print(i)
f=loadstring("i=i+1 print(i)")
f()
end
loadstringGlobal()
0
102
在loadstring中也支持变长参数
function loadstringVariableLen()
f=assert(loadstring("local i={...} return unpack(i)"))
print(f(1,2,3))
end
loadstringVariableLen()
1 2 3