gpt4 book ai didi

error-handling - Lua:在没有参数的情况下调用 error() 时没有堆栈跟踪?

转载 作者:行者123 更新时间:2023-12-01 01:53:30 26 4
gpt4 key购买 nike

在 Lua 中,调用带有消息参数的标准 error() 函数会输出提供的错误消息并打印堆栈跟踪,例如执行以下代码:

print("hello")
error("oops!")
print("world")

将导致以下输出:

$ lua test.lua
hello
lua: test.lua:2: oops!
stack traceback:
[C]: in function 'error'
test.lua:2: in main chunk
[C]: ?

但是,不带参数调用 error() 似乎会使 Lua 在不打印堆栈跟踪的情况下静静地死去。执行这段代码:

print("hello")
error() // no arguments provided
print("world")

会产生这样的输出:

$ lua test2.lua
hello

文档没有说明省略第一个 message 参数:

error (message [, level])

Terminates the last protected function called and returns message as the error message. Function error never returns. Usually, error adds some information about the error position at the beginning of the message. The level argument specifies how to get the error position. With level 1 (the default), the error position is where the error function was called. Level 2 points the error to where the function that called error was called; and so on. Passing a level 0 avoids the addition of error position information to the message.

我想知道这是否是有意为之的行为? IMO 即使没有提供消息,仍然打印堆栈跟踪(并且可能输出一些默认文本,例如 error)是有意义的,因为这就是 assert() 函数的工作方式.

最佳答案

The documentation doesn't say anything about omitting the first message argument:

是的,它确实存在,error() 有一个这样的原型(prototype):

error (message [, level])

注意只有 [] 中的参数是可选的,在本例中为 level,否则参数是必需的,在本例中为 message.

assert()的原型(prototype)比较:

assert (v [, message]) 

如您所见,assert() 中的message 是可选的。

关于error-handling - Lua:在没有参数的情况下调用 error() 时没有堆栈跟踪?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18011799/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com