我正在学习Rust,今天我偶然发现能够通过if
/ else
表达式分配变量。例如:
let y = 5;
let x = if y > 20 { 20 } else { y };
有没有办法用while
循环执行此操作?我试过了:
fn main() {
let mut n = 0;
let mut num = 0;
num += while n < 10 {
n += 1;
5
};
}
希望num
最终等于50,while循环每次迭代递增num
五次,但我得到以下错误
error[E0308]: mismatched types
--> src/main.rs:8:9
|
8 | 5
| ^ expected (), found integral variable
|
= note: expected type `()`
found type `{integer}`
error[E0277]: cannot add-assign `()` to `{integer}`
--> src/main.rs:6:9
|
6 | num += while n < 10 {
| ^^ no implementation for `{integer} += ()`
|
= help: the trait `std::ops::AddAssign<()>` is not implemented for `{integer}`
当然,我可以将num += 5
放在while循环中,但这样可以带来乐趣。
这是我与Rust的第一天,所以我甚至不知道是否有可能做到我的想法。这确实可行吗?我在语法错误吗?
这是我正在尝试运行的代码的另一个版本,但也无法正常工作:
fn main() {
let mut num = 0;
num += while num < 50 {
5
};
}
答案 0 :(得分:6)
没有。 while
循环的值始终为()
,即单位类型。
RFC 1624确实增强了loop
循环,以便能够打破一个值:
let x = loop {
break 42;
};
println!("{}", x);