我是 Rust 的新手。在我看来,这之间的主要区别loop,并while是loop是一个表达式返回一个值。但是为什么不能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.
但是为什么 while 不能是一个表达式呢?
关于这一点和至少一个 RFC 已经有很多讨论。有很多细节需要解决。例如,当 awhile第一次没有进入身体时,你会怎么做?
但这是循环存在的唯一原因吗?
第一个是最合理的。loop也不总是一种表达方式!
我知道虽然 true 是不允许的
尽管默认情况下启用了相关警告,但它是允许的。