欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Lua编译,执行

程序员文章站 2024-03-18 08:02:33
...

编译,执行与错误

dofile: 内置操作,运行Lua代码块,实际核心是loadfile做的
loadfile:从一个文件中加载Lua代码块,但不运行代码,只是编译代码,然后讲编译结果作为一个函数返回,loadfile不回引发错误,只是返回错误值并不处理错误
loadstringloadfile 类似,不同之处在于它是从一个字符串中读取代码,而非从文件读取。
f = loadstring (" i = i + 1 ")
f 就变成了一个函数,每次调用就执行 i = i + 1

错误

显式引发一个错误 error 函数
Lua提供了一个函数来完成输出错误的操作 assert
assert 函数检查其第一个参数是否为 true,为 true则简单地返回该参数;否则(fasle或nil)就引发一个错误,第二个参数是一个可选的信息字符串。

错误处理

在Lua中处理错误,必须使用 pcall 来包装需要执行的代码
假设执行一段代码时,捕获所有执行中引发的错误,第一步就是将这段代码封装到一个函数中

function foo()
end

if pcall(foo) then
    --正常无错误
else
    --错误处理
end

也可以在 pcall 时传入一个匿名函数

追朔(traceback)

pcall 返回其错误信息时,已经销毁了调用栈的部分内容,如果希望得到一个有意义的调用栈,那么就必须在 pall 返回钱获取该信息。
此时,Lua提供了 xcall 函数,该函数除了接受一个需要被调用的函数之外,还接受第二个参数 - 一个错误处理函数。当发生错误时,Lua 会在调用栈展开钱调用错误处理函数,所以可以在这个函数中使用 debug 库来获取关于错误的额外信息。
debug 库提供了两个通用的错误处理函数:

  • 一个是 debug.debug ,它会提供一个 Lua 提示符,让用户来检查错误的原因;
  • 一个是 debug.traceback , 根据调用栈来构建一个扩展的错误信息,另外也可以在任何时候调用这个函数来获取当前执行的调用栈。
相关标签: Lua lua