lua随笔记录

来源:互联网 发布:iphone数据流量开关 编辑:程序博客网 时间:2024/06/06 02:45

loadstring(),从一个串中读入chunk,例如:f=loadstring("i = i + 1"),此时f相当于一个函数,这句代码相当于

f = function() i = i+1 end

loadstring功能很强大,但需要小心使用。

loadfile 和 loadstring 都不会抛出错误,如果发生他们将返回nil加上错误信息

loadstring编译的时候不关心词法范围:

local i = 0

f = loadstring("i = i +1")

g = function() i = i+1 end

这个例子中,g使用局部变量i,但f使用全局变量i,如果没有定义i那么调用f()的时候会报错,loadstring总是在全局环境中编译他的串。

pcall 在保护模式( protected mode)下执行函数内容,同时捕获所有的异常和错误。
若一切正常, pcall 返回 true 以及“被执行函数”的返回值;否则返回 nil 和错误信息。
错误信息不一定仅为字符串(下面的例子是一个 table),传递给 error 的任何信息都
会被 pcall 返回:
local status, err = pcall(function () error({code=121}) end)
print(err.code) --> 121
这种机制提供了强大的能力,足以应付 Lua 中的各种异常和错误情况。我们通过 error
抛出异常,然后通过 pcall 捕获之。


local statue,err = pcall(function() error({code=121}) end)
local params = {level = 12}
local calc = string.gsub("$level*12", "%$(%w+)", params)
local r, v = pcall(loadstring("local vv="..calc..";return vv"))


0 0