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.unitymake.com/archives/programming-life/lua/3459
本博客所有文章除特别声明外,均采用CC BY-NC-SA 4.0许可协议,转载请注明!
THE END
分享
打赏
海报
lua系统学习14-动态加载与编译|LoadString|Require
loadingstring与loadfile类似 不同之处在于它是从一个字符串中读取代码,而非从文件读取。f=loadstring(“i=i+1”)—此时loadstring返回的是一个函数。这就是解释……
<<上一篇
下一篇>>
文章目录
关闭
目 录