为什么“if return”在 Rust 中编译?

aed*_*edm 3 rust

我在 dtolnay 令人费解的 Rust测验中发现了一些奇怪的 Rust 代码。显然,这是一个有效的 Rust 程序(playground):

fn main() {
    if return { print!("1") } {}
}
Run Code Online (Sandbox Code Playgroud)

根据Rust 文档

if 表达式的语法是一个条件操作数,后跟一个后续块、任意数量的 else if 条件和块,以及一个可选的尾部 else 块。条件操作数必​​须具有布尔类型。

对我来说,这意味着该return语句必须以某种方式计算为布尔值,否则代码将无法编译。但这种解释似乎很奇怪,我怀疑肯定还有其他原因。

那么为什么要if return编译呢?

眠りネ*_*ネロク 5

出于同样的原因,以下代码可以编译:

fn create_string() -> String {
    std::process::exit(0);
}
Run Code Online (Sandbox Code Playgroud)

然而,上面函数的主体永远不会返回String值,因为std::process::exit()是一个发散函数(即,它的返回类型是),因此它会产生有效的代码:控制流永远不会到达必须生成值的!点。String

这同样适用于panic!(). 以下代码将您的替换为returnpanic!()也出于相同的原因进行编译:

fn main() {
    if panic!() { print!("1") } {}
}
Run Code Online (Sandbox Code Playgroud)