小编mar*_*son的帖子

使用 lua 的 error(.., level) 是反模式吗?

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)

error-handling lua lua-5.1

5
推荐指数
1
解决办法
1488
查看次数

标签 统计

error-handling ×1

lua ×1

lua-5.1 ×1