有没有理由在恐慌之后加上分号?

Inc*_*tic 3 rust

有没有之间的差异panic!("blah");panic("blah")

据我所知,分号区分语句和表达式1.换句话说,缺少分号表示由于表达式2而预期值.

在大多数情况下,这非常简单,但panic!会导致当前线程终止.该程序永远不会返回panic!,因此表达式的结果毫无意义,对吧?

表达式的表现panic!("blah")是否与声明不同panic!("blah);

She*_*ter 9

在99%的案例中,没有任何有意义的差异.我只是让rustfmt做任何想做的事情而不去考虑它.

有没有理由在恐慌之后加上分号?

是.如果您决定在某些代码中间发生混乱以进行一些快速和脏的调试,如果您不添加分号,则会出现语法错误:

fn main() {
    // ... some code ...

    // We add a quick panic for some reason
    panic!("oops")

    // ... some code ...
    1;
}
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)

使用分号,您将能够编译一些有关无法访问的代码的警告.

还有一个隐含的问题:

恐慌之后有没有理由不加分号?

我能想到的是你在编写自己的不同功能时:

fn crash_override() -> ! {
    panic!("oops")
}
Run Code Online (Sandbox Code Playgroud)

它不是必需的,但对于读者而言,panic!在这种情况下从不"返回"永远类型似乎更为明显.

有没有之间的差异panic!("blah");panic("blah")

是的,前者是一种陈述,后者是一种表达.

panic!导致当前线程终止.

这是默认行为,是的,但它并不是唯一的行为.如果panic = abort未启用,您可以在需要时捕获恐慌.