首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Lua:在没有参数的情况下调用error()时没有堆栈跟踪?

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

Stack Overflow用户
提问于 2013-08-02 08:05:14
回答 1查看 1.7K关注 0票数 3

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

代码语言:javascript
运行
复制
print("hello")
error("oops!")
print("world")

将产生以下产出:

代码语言:javascript
运行
复制
$ lua test.lua
hello
lua: test.lua:2: oops!
stack traceback:
    [C]: in function 'error'
    test.lua:2: in main chunk
    [C]: ?

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

代码语言:javascript
运行
复制
print("hello")
error()    // no arguments provided
print("world")

将产生这样的产出:

代码语言:javascript
运行
复制
$ lua test2.lua
hello

文档没有提到省略第一个message参数:

错误(消息、级别) 终止上次调用的受保护函数,并将消息作为错误消息返回。函数错误永远不会返回。通常,error会在消息的开头添加一些有关错误位置的信息。级别参数指定如何获取错误位置。对于第1级(默认),错误位置是调用错误函数的位置。第2级将错误指向调用error的函数的调用位置,依此类推。传递级别0可避免将错误位置信息添加到消息中。

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

EN

Stack Overflow用户

回答已采纳

发布于 2013-08-02 08:44:31

文档中没有提到省略第一个消息参数:

是的,error()有这样一个原型:

代码语言:javascript
运行
复制
error (message [, level])

注意,只有[]中的参数是可选的,在本例中是level,否则参数是强制性的,在本例中是message

assert()原型的比较

代码语言:javascript
运行
复制
assert (v [, message]) 

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

票数 7
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18011799

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档