while循环可以计算出一个值吗?

mjk*_*fer 1 loops rust

我正在学习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)

She*_*ter 7

不.while循环的值始终()是单位类型.

RFC 1624确实增强了loop循环以便能够打破一个值:

let x = loop {
    break 42;
};
println!("{}", x);
Run Code Online (Sandbox Code Playgroud)

  • RFC是与这里尝试的完全不同的东西; 我可以自信地说,每次迭代的总和产生循环表达式的结果永远不会发生. (2认同)