panic!("blah");
和panic("blah")
之间是否存在差异?
据我所知,分号区分语句和表达式 1 。换句话说,缺少分号表明,由于表达式 2 ,预计会出现一个值。
在大多数情况下,这非常简单,但panic!
会导致当前线程终止。该程序永远不会从panic!
返回,因此表达式的结果毫无意义,对吗?
表达式panic!("blah")
的表现是否与语句panic!("blah);
不同?
答案 0 :(得分:8)
在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")
}
这不是必需的,但对于读者而言,在这种情况下从panic!
“返回”从不类型可能更明显。
panic!("blah");
和panic("blah")
之间是否存在差异?
是的,前者是一种陈述,后者是一种表达。
但
panic!
导致当前线程终止。
这是默认行为,是的,但它不是唯一的行为。未启用panic = abort
时,you can catch panics if you need to。