我正在学习Rust,今天我偶然发现能够通过if/ else表达式分配变量.例如:
let y = 5;
let x = if y > 20 { 20 } else { y };
Run Code Online (Sandbox Code Playgroud)
有没有办法用while循环来做到这一点?我试过了:
fn main() {
let mut n = 0;
let mut num = 0;
num += while n < 10 {
n += 1;
5
};
}
Run Code Online (Sandbox Code Playgroud)
期望num最终将等于50,while循环num每次迭代递增5,但我得到以下错误
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}`
Run Code Online (Sandbox Code Playgroud)
当然,我可以将num += 5while循环放入其中,但这样可以带来乐趣.
这是我与Rust的第一天,所以我甚至不知道是否有可能做到我的想法.这确实可行吗?我在语法错误吗?
这是我试图运行的代码的另一个版本,但也无法工作:
fn main() {
let mut num = 0;
num += while num < 50 {
5
};
}
Run Code Online (Sandbox Code Playgroud)
不.while循环的值始终()是单位类型.
RFC 1624确实增强了loop循环以便能够打破一个值:
let x = loop {
break 42;
};
println!("{}", x);
Run Code Online (Sandbox Code Playgroud)