为什么 while 不是 Rust 中的表达式

tao*_*tsi 2 rust

我是 Rust 的新手。在我看来,这之间的主要区别loop,并whileloop是一个表达式返回一个值。但是为什么不能while是表达式呢?像这样的代码不会编译:

fn main() {
    let mut count = 0;
    let x = while count != 2 {
        count += 1;
        count
    };
    println!("{}", x);
}
Run Code Online (Sandbox Code Playgroud)

但也许编译器可以while像这样解释这个块:

let x = {
    count += 1; // 1st iteration
    count += 1; // 2nd iteration
    count
};
Run Code Online (Sandbox Code Playgroud)

我知道这在语义上看起来很奇怪。但这是唯一loop存在的理由吗?

我知道这while true是不允许的,但你总是可以这样做

let x = 10;
while x != 11 {
    println!("test");
}
Run Code Online (Sandbox Code Playgroud)

其行为与while true.

Aco*_*orn 7

但是为什么 while 不能是一个表达式呢?

关于这一点和至少一个 RFC 已经有很多讨论。有很多细节需要解决。例如,当 awhile第一次没有进入身体时,你会怎么做?

但这是循环存在的唯一原因吗?

第一个是最合理的。loop也不总是一种表达方式!

我知道虽然 true 是不允许的

尽管默认情况下启用了相关警告,但它是允许的。