在 Lua 中,error()
使用 message 参数调用标准函数会输出提供的错误消息并打印堆栈跟踪,例如执行以下代码:
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
参数:
错误(消息 [,级别])
终止最后调用的受保护函数并返回 message 作为错误消息。函数错误永远不会返回。通常,error 在消息的开头添加一些关于错误位置的信息。level 参数指定如何获取错误位置。对于级别 1(默认),错误位置是调用错误函数的位置。级别 2 将错误指向调用错误的函数的位置;等等。传递 0 级可避免将错误位置信息添加到消息中。
我想知道这是否是预期的行为?error
即使没有提供消息,IMO 仍然打印堆栈跟踪(并且可能输出一些默认文本,例如)是有意义的,因为这就是assert()
函数的工作方式。