在 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
使用分号,您将能够在编译时出现一些有关无法访问的代码的警告。
还有一个隐含的问题:
有什么理由not在恐慌后面加分号?
我能想到的是当你编写自己的发散函数时:
fn crash_override() -> ! {
panic!("oops")
}
这不是必需的,但对于读者来说,从“返回”的 never 类型可能会显得更明显panic!
在这种情况下。
之间有区别吗panic!("blah");
and panic("blah")
?
是的,前者是陈述,后者是表达。
but panic!
导致当前线程终止。
是的,这是默认行为,但它不是唯一的行为。什么时候panic = abort
未启用,如果需要,你可以陷入恐慌 https://stackoverflow.com/q/27384824/155423.