lua系统学习14-动态加载与编译|LoadString|Require
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()
通常使用require来加载c程序块 ,这个函数会搜索指定的库,然后用loadlib来加载库,并返回初始化函数。这个初始化函数应将库中提供的函数注册到lua中,就好像一段lua代码定义了其他的函数一样。在Unity中使用Lua 这个方法很常用
Package.loadlib 参数:动态库的完整路径和一个函数名称。
loadlib函数加载指定的库,并没有调用库中的任何函数,它会将一个c函数作为Lua函数返回。
作者:Miracle
来源:麦瑞克博客
链接:https://www.playcreator.cn/archives/programming-life/lua/3459/
本博客所有文章除特别声明外,均采用CC BY-NC-SA 4.0许可协议,转载请注明!
来源:麦瑞克博客
链接:https://www.playcreator.cn/archives/programming-life/lua/3459/
本博客所有文章除特别声明外,均采用CC BY-NC-SA 4.0许可协议,转载请注明!
THE END
0
打赏
海报
lua系统学习14-动态加载与编译|LoadString|Require
loadingstring与loadfile类似 不同之处在于它是从一个字符串中读取代码,而非从文件读取。f=loadstring(“i=i+1”)—此时loadstring返回的是一个函数。这就是解释……
文章目录
关闭