lua系统学习14-动态加载与编译

19 篇文章 0 订阅
14 篇文章 0 订阅

编译

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

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值