在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会在消息的开头添加一些有关错误位置的信息。级别参数指定如何获取错误位置。对于第1级(默认),错误位置是调用错误函数的位置。第2级将错误指向调用error的函数的调用位置,依此类推。传递级别0可避免将错误位置信息添加到消息中。
我想知道这是否是有意的行为?即使没有提供消息,仍然打印堆栈跟踪(可能输出一些默认文本,例如error)也是有意义的,因为这就是assert()函数的工作方式。
发布于 2013-08-02 08:44:31
文档中没有提到省略第一个消息参数:
是的,error()有这样一个原型:
error (message [, level])注意,只有[]中的参数是可选的,在本例中是level,否则参数是强制性的,在本例中是message。
与assert()原型的比较
assert (v [, message]) 如您所见,message在assert()中是可选的。
https://stackoverflow.com/questions/18011799
复制相似问题