Rust 有什么理由在恐慌之后加上分号吗?

Rust 有什么理由在恐慌之后加上分号吗?,rust,Rust,panic之间有区别吗!(“废话”)和恐慌(“废话”) 据我所知,分号区分语句和表达式。换句话说,缺少分号表示表达式的结果需要一个值 在大多数情况下,这是非常直接的,但是恐慌导致当前线程终止。程序将永远不会从死机状态返回

panic之间有区别吗!(“废话”)
恐慌(“废话”)

据我所知,分号区分语句和表达式。换句话说,缺少分号表示表达式的结果需要一个值

在大多数情况下,这是非常直接的,但是
恐慌导致当前线程终止。程序将永远不会从
死机状态返回

将表达式<代码>恐慌!(“废话”)
是否曾表现出与声明不同的行为
恐慌!(“废话);

在99%的情况下,没有什么有意义的区别。我只是让rustfmt做它想做的事情,而不去想它

有什么理由在恐慌之后加上分号吗

是的。如果您决定在某些代码的中间设置一个惊慌以进行一些快速和肮脏的调试,如果不添加分号,则会出现语法错误:

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

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

    // ... some code ...
    1;
}
错误:应为`、`、`、`}`中的一个或运算符,但找到了`'1`
-->src/main.rs:8:5
|
5 |恐慌!(“哎呀”)
|-此处应为“.”、“;”、“}”或运算符之一
...
8 |     1;
|^意外标记
使用分号,您将能够编译一些关于无法访问代码的警告

还有一个隐含的问题:

有什么理由不在恐慌之后加上分号吗

我能想到的是当你写你自己的发散函数时:

fn crash_override() -> ! {
    panic!("oops")
}
不需要它,但对于读者来说,可能更明显的是,在本例中,从不类型是从
panic!
中“返回”的

恐慌!(“废话”);
和恐慌(“废话”)之间有区别吗

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

但是,
panic!
会导致当前线程终止


这是默认的行为,是的,但不是唯一的。当
panic=abort
未启用时,.

因为词法分析器和语法分析器就是这样构建的。@KoltPenny你是什么意思?谢谢你非常全面的回答!只是为了澄清一下,你链接的问题现在已经过时并且不正确了,对吗?@Increasi是的,我只是编辑了一下,注意到了这一点。