我刚接触 Rust,我感觉 loop
和 while
的一个主要区别是 loop
是一个返回值的表达式。但是为什么 while
不能是一个表达式呢?像下面这样的代码是无法编译通过的:
fn main() {
let mut count = 0;
let x = while count != 2 {
count += 1;
count
};
println!("{}", x);
}
但也许编译器可以将while
代码块解释为:
let x = {
count += 1; // 1st iteration
count += 1; // 2nd iteration
count
};
我知道这看起来语义上很奇怪。但是这是loop
存在的唯一原因吗?
我知道while true
是不允许的,但你总是可以这样做。
let x = 10;
while x != 11 {
println!("test");
}
这个代码片段的作用与while true
完全相同。
loop
即使立即被中断,也总是至少运行一次,因此用于退出的break
始终可以生成一个值。一个while
可能会执行0次(如果条件立即为false,同样适用于带有空迭代器的for
),因此在某些情况下它无法生成返回值,除非语法以某种方式扩展来处理这种情况。 - Masklinn