rust - 恐慌后有什么理由加分号吗?
问题描述
panic!("blah");
和有区别panic("blah")
吗?
据我了解,分号区分语句和表达式1。换句话说,缺少分号表明表达式2的结果是预期的值。
在大多数情况下,这非常简单,但panic!
会导致当前线程终止。程序永远不会从那里返回panic!
,所以表达式的结果是没有意义的,对吧?
表达式panic!("blah")
的行为是否会与语句不同panic!("blah);
?
解决方案
在 99% 的情况下,没有有意义的差异。我只是让 rustfmt 做它想做的任何事情,而不去想它。
恐慌后有什么理由加分号吗?
是的。如果你决定在一些代码中间加入恐慌以进行一些快速而肮脏的调试,如果你不添加分号,你会得到一个语法错误:
fn main() {
// ... some code ...
// We add a quick panic for some reason
panic!("oops")
// ... some code ...
1;
}
error: expected one of `.`, `;`, `?`, `}`, or an operator, found `1`
--> src/main.rs:8:5
|
5 | panic!("oops")
| - expected one of `.`, `;`, `?`, `}`, or an operator here
...
8 | 1;
| ^ unexpected token
使用分号,您将能够在编译时出现一些关于无法访问代码的警告。
还有一个隐含的问题:
恐慌后有什么理由不加分号吗?
我能想到的一个是当您编写自己的发散函数时:
fn crash_override() -> ! {
panic!("oops")
}
这不是必需的,但对于读者来说,在这种情况下,never 类型正在被“返回”,这可能看起来更明显panic!
。
panic!("blah");
和有区别panic("blah")
吗?
是的,前者是语句,后者是表达式。
但
panic!
会导致当前线程终止。
这是默认行为,是的,但它不是唯一的。panic = abort
未启用时,如果需要,您可以捕获恐慌。
推荐阅读
- json - 使用 Google Apps 脚本从 JSON 对象创建 Google Sheet
- postgresql - heimir-sverrisson 为 postgres 构建 jdbc2_fdw 时出现几个构建错误
- angular - Primeng 编辑器添加撤消和重做按钮
- postgresql - 如何抑制来自控制台的警告
- javascript - TypeError:在 14 处缺少参数名称
- xslt - 使用 xslt 3.0 基于 Element 属性合并(左连接)2 个 XML 文件
- python - 如何在二维列表的一行中找到最大值及其索引?
- r - 为什么我的服务站点没有呈现此错误?
- swift - 如何创建抛物线形状的 SKPhysicsBody?
- swift - 滑动以仅删除 SwiftUI 列表中的选定行?