Lua 5.1 的 API 提供了一个error()函数,它接受一个字符串(错误消息)和一个“级别”。
我的理解是level,可以让您向上移动调用堆栈,这样您就可以提供更好的错误报告,尤其是在将模块作为 API 提供时。
例如,假设用户api_function(x)使用进行呼叫x = nil。这将是一个错误,但 API 直到深入了解其代码后才知道。
它可能会导致以下调用堆栈:
api_function(x) : user_file.lua:30
-> api_function : api.lua:20
-> some_function : api.lua:250
-> handle_when_x_string : api_string.lua:20
-> error("value is nil") : api_string.lua:66
Run Code Online (Sandbox Code Playgroud)
正如所写的,用户会看到类似的东西api_string.lua:66 error: value is nil,而他们真正想要看到的“不错”的错误,user_file.lua:30 error: value is nil。(“这个错误是我的错还是 API 中的错误?”)
现在,我们可以将代码更改为“弹出调用堆栈”,
api_function(x) : user_file.lua:30
-> api_function : api.lua:20
-> some_function : api.lua:250
-> handle_when_x_string : api_string.lua:20
-> error("value is nil", …Run Code Online (Sandbox Code Playgroud)